James McCool
commited on
Commit
·
11b09bf
1
Parent(s):
66905e3
Enhance portfolio trimming logic in app.py: add comprehensive filtering options based on salary, finish percentile, and player selections, and update predict_dupes function to adjust 'Product Own' calculation for improved accuracy.
Browse files- app.py +32 -0
- global_func/predict_dupes.py +1 -1
app.py
CHANGED
@@ -807,7 +807,39 @@ with tab3:
|
|
807 |
|
808 |
submitted = st.form_submit_button("Trim")
|
809 |
if submitted:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
810 |
st.session_state['portfolio'] = trim_portfolio(st.session_state['portfolio'], performance_type, own_type)
|
|
|
|
|
811 |
|
812 |
with col2:
|
813 |
st.session_state['portfolio'] = predict_dupes(st.session_state['portfolio'], map_dict, site_var, type_var, Contest_Size, strength_var)
|
|
|
807 |
|
808 |
submitted = st.form_submit_button("Trim")
|
809 |
if submitted:
|
810 |
+
st.session_state['portfolio'] = predict_dupes(st.session_state['portfolio'], map_dict, site_var, type_var, Contest_Size, strength_var)
|
811 |
+
st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['Dupes'] <= max_dupes]
|
812 |
+
st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['salary'] >= min_salary]
|
813 |
+
st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['salary'] <= max_salary]
|
814 |
+
st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['Finish_percentile'] <= max_finish_percentile]
|
815 |
+
st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['Lineup Edge'] >= min_lineup_edge]
|
816 |
+
if stack_dict is not None:
|
817 |
+
if stack_toggle == 'All Stacks':
|
818 |
+
st.session_state['portfolio'] = st.session_state['portfolio']
|
819 |
+
st.session_state['portfolio'] = st.session_state['portfolio'][~st.session_state['portfolio']['Stack'].isin(stack_remove)]
|
820 |
+
else:
|
821 |
+
st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['Stack'].isin(stack_selections)]
|
822 |
+
st.session_state['portfolio'] = st.session_state['portfolio'][~st.session_state['portfolio']['Stack'].isin(stack_remove)]
|
823 |
+
if player_remove:
|
824 |
+
# Create mask for lineups that contain any of the removed players
|
825 |
+
player_columns = [col for col in st.session_state['portfolio'].columns if col not in excluded_cols]
|
826 |
+
remove_mask = st.session_state['portfolio'][player_columns].apply(
|
827 |
+
lambda row: not any(player in list(row) for player in player_remove), axis=1
|
828 |
+
)
|
829 |
+
st.session_state['portfolio'] = st.session_state['portfolio'][remove_mask]
|
830 |
+
|
831 |
+
if player_lock:
|
832 |
+
# Create mask for lineups that contain all locked players
|
833 |
+
player_columns = [col for col in st.session_state['portfolio'].columns if col not in excluded_cols]
|
834 |
+
|
835 |
+
lock_mask = st.session_state['portfolio'][player_columns].apply(
|
836 |
+
lambda row: all(player in list(row) for player in player_lock), axis=1
|
837 |
+
)
|
838 |
+
st.session_state['portfolio'] = st.session_state['portfolio'][lock_mask]
|
839 |
+
|
840 |
st.session_state['portfolio'] = trim_portfolio(st.session_state['portfolio'], performance_type, own_type)
|
841 |
+
export_file = st.session_state['portfolio'].copy()
|
842 |
+
st.session_state['portfolio'] = st.session_state['portfolio'].sort_values(by='median', ascending=False)
|
843 |
|
844 |
with col2:
|
845 |
st.session_state['portfolio'] = predict_dupes(st.session_state['portfolio'], map_dict, site_var, type_var, Contest_Size, strength_var)
|
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() *
|
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['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)
|