James McCool commited on
Commit
58be65b
·
1 Parent(s): 62a44af

Enhance portfolio reset functionality in app.py: implement comprehensive filtering options for salary, finish percentile, and player selections, and update predict_dupes function to calculate 'Weighted Own' for improved accuracy in portfolio management.

Browse files
Files changed (2) hide show
  1. app.py +33 -2
  2. global_func/predict_dupes.py +1 -1
app.py CHANGED
@@ -803,10 +803,41 @@ with tab3:
803
  submitted = st.form_submit_button("Submit")
804
  with st.expander('Trimming Options'):
805
  if st.button('Reset Portfolio', key='reset_port'):
806
- st.session_state['portfolio'] = st.session_state['origin_portfolio'].copy()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
807
  with st.form(key='trim_form'):
808
  performance_type = st.selectbox("Select sort type", ['median', 'Finish_percentile'])
809
- own_type = st.selectbox("Select trimming variable type", ['Own', 'Product Own'])
810
 
811
  submitted = st.form_submit_button("Trim")
812
  if submitted:
 
803
  submitted = st.form_submit_button("Submit")
804
  with st.expander('Trimming Options'):
805
  if st.button('Reset Portfolio', key='reset_port'):
806
+ st.session_state['portfolio'] = predict_dupes(st.session_state['origin_portfolio'], map_dict, site_var, type_var, Contest_Size, strength_var)
807
+ st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['Dupes'] <= max_dupes]
808
+ st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['salary'] >= min_salary]
809
+ st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['salary'] <= max_salary]
810
+ st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['Finish_percentile'] <= max_finish_percentile]
811
+ st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['Lineup Edge'] >= min_lineup_edge]
812
+ if stack_dict is not None:
813
+ if stack_toggle == 'All Stacks':
814
+ st.session_state['portfolio'] = st.session_state['portfolio']
815
+ st.session_state['portfolio'] = st.session_state['portfolio'][~st.session_state['portfolio']['Stack'].isin(stack_remove)]
816
+ else:
817
+ st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['Stack'].isin(stack_selections)]
818
+ st.session_state['portfolio'] = st.session_state['portfolio'][~st.session_state['portfolio']['Stack'].isin(stack_remove)]
819
+ if player_remove:
820
+ # Create mask for lineups that contain any of the removed players
821
+ player_columns = [col for col in st.session_state['portfolio'].columns if col not in excluded_cols]
822
+ remove_mask = st.session_state['portfolio'][player_columns].apply(
823
+ lambda row: not any(player in list(row) for player in player_remove), axis=1
824
+ )
825
+ st.session_state['portfolio'] = st.session_state['portfolio'][remove_mask]
826
+
827
+ if player_lock:
828
+ # Create mask for lineups that contain all locked players
829
+ player_columns = [col for col in st.session_state['portfolio'].columns if col not in excluded_cols]
830
+
831
+ lock_mask = st.session_state['portfolio'][player_columns].apply(
832
+ lambda row: all(player in list(row) for player in player_lock), axis=1
833
+ )
834
+ st.session_state['portfolio'] = st.session_state['portfolio'][lock_mask]
835
+
836
+ export_file = st.session_state['portfolio'].copy()
837
+ st.session_state['portfolio'] = st.session_state['portfolio'].sort_values(by='median', ascending=False)
838
  with st.form(key='trim_form'):
839
  performance_type = st.selectbox("Select sort type", ['median', 'Finish_percentile'])
840
+ own_type = st.selectbox("Select trimming variable type", ['Own', 'Weighted Own'])
841
 
842
  submitted = st.form_submit_button("Trim")
843
  if submitted:
global_func/predict_dupes.py CHANGED
@@ -181,7 +181,7 @@ def predict_dupes(portfolio, maps_dict, site_var, type_var, Contest_Size, streng
181
  portfolio['Lineup Edge'] = portfolio['Win%'] * ((.5 - portfolio['Finish_percentile']) * (Contest_Size / 2.5))
182
  portfolio['Lineup Edge'] = portfolio.apply(lambda row: row['Lineup Edge'] / (row['Dupes'] + 1) if row['Dupes'] > 0 else row['Lineup Edge'], axis=1)
183
  portfolio['Lineup Edge'] = portfolio['Lineup Edge'] - portfolio['Lineup Edge'].mean()
184
- portfolio['Product Own'] = portfolio[own_columns].product(axis=1).mean() * 1000
185
  portfolio = portfolio.drop(columns=dup_count_columns)
186
  portfolio = portfolio.drop(columns=own_columns)
187
  portfolio = portfolio.drop(columns=calc_columns)
 
181
  portfolio['Lineup Edge'] = portfolio['Win%'] * ((.5 - portfolio['Finish_percentile']) * (Contest_Size / 2.5))
182
  portfolio['Lineup Edge'] = portfolio.apply(lambda row: row['Lineup Edge'] / (row['Dupes'] + 1) if row['Dupes'] > 0 else row['Lineup Edge'], axis=1)
183
  portfolio['Lineup Edge'] = portfolio['Lineup Edge'] - portfolio['Lineup Edge'].mean()
184
+ portfolio['Weighted Own'] = portfolio['Own'] * (portfolio[own_columns].max(axis=1) / 100)
185
  portfolio = portfolio.drop(columns=dup_count_columns)
186
  portfolio = portfolio.drop(columns=own_columns)
187
  portfolio = portfolio.drop(columns=calc_columns)