James McCool commited on
Commit
a7fac7f
·
1 Parent(s): dbce748

Refactor lineup filtering logic in app.py to streamline player selection process. Updated multiselect options for removing and including players, enhancing clarity and user experience. Improved filtering conditions to ensure accurate lineup management based on user selections.

Browse files
Files changed (1) hide show
  1. app.py +28 -26
app.py CHANGED
@@ -1303,12 +1303,8 @@ with tab2:
1303
  for col in st.session_state['working_frame'].columns:
1304
  if col not in excluded_cols:
1305
  player_names.update(st.session_state['working_frame'][col].unique())
1306
- conditional_var_1 = st.selectbox("Remove variable: ", options=['Players', 'Stacks'], key='conditional_var_1')
1307
- conditional_var_2 = st.selectbox("Contains variable: ", options=['Players', 'Stacks'], key='conditional_var_2')
1308
- conditional_remove_players = st.multiselect("If Remove variable is Players, remove lineups containing players:", options=sorted(list(player_names)), default=[])
1309
- conditional_remove_stacks = st.multiselect("If Remove variable is Stacks, remove lineups containing stacks:", options=sorted(list(set(st.session_state['stack_dict'].values()))), default=[])
1310
- conditional_include_players = st.multiselect("If Contains variable is Players, where lineups contain players:", options=sorted(list(player_names)), default=[])
1311
- conditional_include_stacks = st.multiselect("If Contains variable is Stacks, where lineups contain stacks:", options=sorted(list(set(st.session_state['stack_dict'].values()))), default=[])
1312
 
1313
  submitted_col, export_col = st.columns(2)
1314
  st.info("Portfolio Button applies to your overall Portfolio, Export button applies to your Custom Export")
@@ -1319,31 +1315,37 @@ with tab2:
1319
  if reg_submitted:
1320
  st.session_state['settings_base'] = False
1321
  parsed_frame = st.session_state['working_frame'].copy()
1322
- if st.session_state['conditional_var_1'] == 'Players':
1323
- if st.session_state['conditional_var_2'] == 'Players':
1324
- parsed_frame = parsed_frame[~parsed_frame['player_names'].isin(conditional_remove_players)] & parsed_frame[parsed_frame['player_names'].isin(conditional_include_players)]
1325
- elif st.session_state['conditional_var_2'] == 'Stacks':
1326
- parsed_frame = parsed_frame[~parsed_frame['Stack'].isin(conditional_remove_stacks)] & parsed_frame[parsed_frame['Stack'].isin(conditional_include_stacks)]
1327
- elif st.session_state['conditional_var_1'] == 'Stacks':
1328
- if st.session_state['conditional_var_2'] == 'Players':
1329
- parsed_frame = parsed_frame[parsed_frame['player_names'].isin(conditional_include_players)] & parsed_frame[~parsed_frame['player_names'].isin(conditional_remove_players)]
1330
- elif st.session_state['conditional_var_2'] == 'Stacks':
1331
- parsed_frame = parsed_frame[parsed_frame['Stack'].isin(conditional_include_stacks)] & parsed_frame[~parsed_frame['Stack'].isin(conditional_remove_stacks)]
 
 
 
1332
  st.session_state['working_frame'] = parsed_frame.sort_values(by='median', ascending=False).reset_index(drop=True)
1333
  st.session_state['export_merge'] = st.session_state['working_frame'].copy()
1334
  elif exp_submitted:
1335
  st.session_state['settings_base'] = False
1336
  parsed_frame = st.session_state['export_base'].copy()
1337
- if st.session_state['conditional_var_1'] == 'Players':
1338
- if st.session_state['conditional_var_2'] == 'Players':
1339
- parsed_frame = parsed_frame[~parsed_frame['player_names'].isin(conditional_remove_players)] & parsed_frame[parsed_frame['player_names'].isin(conditional_include_players)]
1340
- elif st.session_state['conditional_var_2'] == 'Stacks':
1341
- parsed_frame = parsed_frame[~parsed_frame['Stack'].isin(conditional_remove_stacks)] & parsed_frame[parsed_frame['Stack'].isin(conditional_include_stacks)]
1342
- elif st.session_state['conditional_var_1'] == 'Stacks':
1343
- if st.session_state['conditional_var_2'] == 'Players':
1344
- parsed_frame = parsed_frame[parsed_frame['player_names'].isin(conditional_include_players)] & parsed_frame[~parsed_frame['player_names'].isin(conditional_remove_players)]
1345
- elif st.session_state['conditional_var_2'] == 'Stacks':
1346
- parsed_frame = parsed_frame[parsed_frame['Stack'].isin(conditional_include_stacks)] & parsed_frame[~parsed_frame['Stack'].isin(conditional_remove_stacks)]
 
 
 
1347
  st.session_state['export_base'] = parsed_frame.sort_values(by='median', ascending=False).reset_index(drop=True)
1348
  st.session_state['export_merge'] = st.session_state['export_base'].copy()
1349
 
 
1303
  for col in st.session_state['working_frame'].columns:
1304
  if col not in excluded_cols:
1305
  player_names.update(st.session_state['working_frame'][col].unique())
1306
+ conditional_remove_players = st.multiselect("Remove lineups containing player(s):", options=sorted(list(player_names)), default=[])
1307
+ conditional_include_players = st.multiselect("If they also contain player(s):", options=sorted(list(player_names)), default=[])
 
 
 
 
1308
 
1309
  submitted_col, export_col = st.columns(2)
1310
  st.info("Portfolio Button applies to your overall Portfolio, Export button applies to your Custom Export")
 
1315
  if reg_submitted:
1316
  st.session_state['settings_base'] = False
1317
  parsed_frame = st.session_state['working_frame'].copy()
1318
+
1319
+ # Filter rows that contain ALL conditional_include_players AND NONE of conditional_remove_players
1320
+ if conditional_include_players:
1321
+ include_mask = parsed_frame['player_names'].apply(lambda x: all(player in x for player in conditional_include_players))
1322
+ else:
1323
+ include_mask = True
1324
+
1325
+ if conditional_remove_players:
1326
+ remove_mask = parsed_frame['player_names'].apply(lambda x: not any(player in x for player in conditional_remove_players))
1327
+ else:
1328
+ remove_mask = True
1329
+
1330
+ parsed_frame = parsed_frame[include_mask & remove_mask]
1331
  st.session_state['working_frame'] = parsed_frame.sort_values(by='median', ascending=False).reset_index(drop=True)
1332
  st.session_state['export_merge'] = st.session_state['working_frame'].copy()
1333
  elif exp_submitted:
1334
  st.session_state['settings_base'] = False
1335
  parsed_frame = st.session_state['export_base'].copy()
1336
+
1337
+ # Filter rows that contain ALL conditional_include_players AND NONE of conditional_remove_players
1338
+ if conditional_include_players:
1339
+ include_mask = parsed_frame['player_names'].apply(lambda x: all(player in x for player in conditional_include_players))
1340
+ else:
1341
+ include_mask = True
1342
+
1343
+ if conditional_remove_players:
1344
+ remove_mask = parsed_frame['player_names'].apply(lambda x: not any(player in x for player in conditional_remove_players))
1345
+ else:
1346
+ remove_mask = True
1347
+
1348
+ parsed_frame = parsed_frame[include_mask & remove_mask]
1349
  st.session_state['export_base'] = parsed_frame.sort_values(by='median', ascending=False).reset_index(drop=True)
1350
  st.session_state['export_merge'] = st.session_state['export_base'].copy()
1351