James McCool
commited on
Commit
·
a4e3e2e
1
Parent(s):
e8a3351
Refactor session state handling in app.py
Browse files- Updated the management of player columns and mapping dictionaries to utilize session state, improving data consistency and accessibility.
- Enhanced filtering logic for user selections, ensuring that the displayed contest information reflects the latest user inputs and selections.
- Streamlined the application of calculations for player exposures and stack sizes, enhancing performance and user experience.
app.py
CHANGED
@@ -150,12 +150,12 @@ with tab1:
|
|
150 |
with tab2:
|
151 |
excluded_cols = ['BaseName', 'EntryCount']
|
152 |
if 'Contest' in st.session_state and 'duplication_frame' not in st.session_state:
|
153 |
-
player_columns = [col for col in st.session_state['Contest'].columns if col not in excluded_cols]
|
154 |
-
for col in player_columns:
|
155 |
st.session_state['Contest'][col] = st.session_state['Contest'][col].astype(str)
|
156 |
|
157 |
# Create mapping dictionaries
|
158 |
-
map_dict = {
|
159 |
'pos_map': st.session_state['pos_dict'],
|
160 |
'team_map': st.session_state['team_dict'],
|
161 |
'salary_map': st.session_state['salary_dict'],
|
@@ -168,22 +168,22 @@ with tab2:
|
|
168 |
if type_var == 'Classic':
|
169 |
working_df['stack'] = working_df.apply(
|
170 |
lambda row: Counter(
|
171 |
-
map_dict['team_map'].get(player, '') for player in row[4:]
|
172 |
-
if map_dict['team_map'].get(player, '') != ''
|
173 |
-
).most_common(1)[0][0] if any(map_dict['team_map'].get(player, '') for player in row[4:]) else '',
|
174 |
axis=1
|
175 |
)
|
176 |
working_df['stack_size'] = working_df.apply(
|
177 |
lambda row: Counter(
|
178 |
-
map_dict['team_map'].get(player, '') for player in row[4:]
|
179 |
-
if map_dict['team_map'].get(player, '') != ''
|
180 |
-
).most_common(1)[0][1] if any(map_dict['team_map'].get(player, '') for player in row[4:]) else '',
|
181 |
axis=1
|
182 |
)
|
183 |
-
working_df['salary'] = working_df.apply(lambda row: sum(map_dict['salary_map'].get(player, 0) for player in row), axis=1)
|
184 |
working_df['actual_fpts'] = working_df.apply(lambda row: sum(st.session_state['actual_dict'].get(player, 0) for player in row), axis=1)
|
185 |
working_df['actual_own'] = working_df.apply(lambda row: sum(st.session_state['ownership_dict'].get(player, 0) for player in row), axis=1)
|
186 |
-
working_df['sorted'] = working_df[player_columns].apply(
|
187 |
lambda row: ','.join(sorted(row.values)),
|
188 |
axis=1
|
189 |
)
|
@@ -209,22 +209,22 @@ with tab2:
|
|
209 |
elif type_var == 'Showdown':
|
210 |
working_df['stack'] = working_df.apply(
|
211 |
lambda row: Counter(
|
212 |
-
map_dict['team_map'].get(player, '') for player in row[2:]
|
213 |
-
if map_dict['team_map'].get(player, '') != ''
|
214 |
-
).most_common(1)[0][0] if any(map_dict['team_map'].get(player, '') for player in row[2:]) else '',
|
215 |
axis=1
|
216 |
)
|
217 |
working_df['stack_size'] = working_df.apply(
|
218 |
lambda row: Counter(
|
219 |
-
map_dict['team_map'].get(player, '') for player in row[2:]
|
220 |
-
if map_dict['team_map'].get(player, '') != ''
|
221 |
-
).most_common(1)[0][1] if any(map_dict['team_map'].get(player, '') for player in row[2:]) else '',
|
222 |
axis=1
|
223 |
)
|
224 |
# Modified salary calculation with 1.5x multiplier for first player
|
225 |
working_df['salary'] = working_df.apply(
|
226 |
-
lambda row: (map_dict['salary_map'].get(row[2], 0) * 1.5) +
|
227 |
-
sum(map_dict['salary_map'].get(player, 0) for player in row[3:]),
|
228 |
axis=1
|
229 |
)
|
230 |
# Modified actual_fpts calculation with 1.5x multiplier for first player
|
@@ -234,7 +234,7 @@ with tab2:
|
|
234 |
axis=1
|
235 |
)
|
236 |
working_df['actual_own'] = working_df.apply(lambda row: sum(st.session_state['ownership_dict'].get(player, 0) for player in row), axis=1)
|
237 |
-
working_df['sorted'] = working_df[player_columns].apply(
|
238 |
lambda row: ','.join(sorted(row.values)),
|
239 |
axis=1
|
240 |
)
|
@@ -257,8 +257,9 @@ with tab2:
|
|
257 |
working_df['finish'] = working_df['index']
|
258 |
working_df = working_df.drop(['sorted', 'index'], axis=1)
|
259 |
# working_df['stack_size'] = working_df['stack_size'].fillna(1).astype(int)
|
260 |
-
st.session_state['field_player_frame'] = create_player_exposures(working_df, player_columns)
|
261 |
st.session_state['field_stack_frame'] = create_stack_exposures(working_df)
|
|
|
262 |
|
263 |
with st.expander("Info and filters"):
|
264 |
st.info("Note that any filtering here needs to be reset manually, i.e. if you parse down the specific users and want to reset the table, just backtrack your filtering by setting it back to 'All'")
|
@@ -268,22 +269,22 @@ with tab2:
|
|
268 |
with st.form(key='filter_form'):
|
269 |
users_var, entries_var, stack_var, stack_size_var, player_var = st.columns(5)
|
270 |
with users_var:
|
271 |
-
entry_parse_var = st.selectbox("Do you want to view a specific user(s)?", ['All', 'Specific'], key = 'entry_parse_var')
|
272 |
-
entry_names = st.multiselect("Select players", options=st.session_state['entry_list'], default=[], key = 'entry_names')
|
273 |
with entries_var:
|
274 |
-
low_entries_var = st.number_input("Low end of entries range", min_value=0, max_value=150, value=1, key = 'low_entries_var')
|
275 |
-
high_entries_var = st.number_input("High end of entries range", min_value=0, max_value=150, value=150, key = 'high_entries_var')
|
276 |
with stack_var:
|
277 |
-
stack_parse_var = st.selectbox("Do you want to view lineups with specific team(s)?", ['All', 'Specific'], key = 'stack_parse_var')
|
278 |
-
stack_names = st.multiselect("Select teams", options=
|
279 |
with stack_size_var:
|
280 |
-
stack_size_parse_var = st.selectbox("Do you want to view a specific stack size(s)?", ['All', 'Specific'], key = 'stack_size_parse_var')
|
281 |
-
stack_size_names = st.multiselect("Select stack sizes", options=
|
282 |
with player_var:
|
283 |
-
unique_players = pd.unique(
|
284 |
-
unique_players = [p for p in unique_players if p != 'nan'] # Remove any NaN values
|
285 |
-
player_parse_var = st.selectbox("Do you want to view lineups with specific player(s)?", ['All', 'Specific'], key = 'player_parse_var')
|
286 |
-
player_names = st.multiselect("Select players", options=unique_players, default=[], key = 'player_names')
|
287 |
submitted = st.form_submit_button("Submit")
|
288 |
if submitted:
|
289 |
if 'player_frame' in st.session_state:
|
@@ -291,17 +292,17 @@ with tab2:
|
|
291 |
if 'stack_frame' in st.session_state:
|
292 |
del st.session_state['stack_frame']
|
293 |
|
294 |
-
if entry_parse_var == 'Specific' and entry_names:
|
295 |
-
|
296 |
-
if stack_parse_var == 'Specific' and stack_names:
|
297 |
-
|
298 |
-
if stack_size_parse_var == 'Specific' and stack_size_names:
|
299 |
-
|
300 |
-
if player_parse_var == 'Specific' and player_names:
|
301 |
-
mask =
|
302 |
-
|
303 |
-
if low_entries_var and high_entries_var:
|
304 |
-
|
305 |
|
306 |
# Initialize pagination in session state if not exists
|
307 |
if 'current_page' not in st.session_state:
|
@@ -309,7 +310,7 @@ with tab2:
|
|
309 |
|
310 |
# Calculate total pages
|
311 |
rows_per_page = 500
|
312 |
-
total_rows = len(
|
313 |
total_pages = (total_rows + rows_per_page - 1) // rows_per_page
|
314 |
|
315 |
# Create pagination controls in a single row
|
@@ -337,7 +338,7 @@ with tab2:
|
|
337 |
start_idx = (st.session_state.current_page - 1) * rows_per_page
|
338 |
end_idx = min((st.session_state.current_page) * rows_per_page, total_rows)
|
339 |
st.dataframe(
|
340 |
-
|
341 |
.background_gradient(axis=0)
|
342 |
.background_gradient(cmap='RdYlGn')
|
343 |
.format(precision=2),
|
@@ -363,14 +364,14 @@ with tab2:
|
|
363 |
else:
|
364 |
pos_select = None
|
365 |
|
366 |
-
if entry_parse_var == 'All':
|
367 |
|
368 |
-
st.session_state['player_frame'] = create_player_exposures(
|
369 |
hold_frame = st.session_state['player_frame'].copy()
|
370 |
if sport_select == 'GOLF':
|
371 |
hold_frame['Pos'] = 'G'
|
372 |
else:
|
373 |
-
hold_frame['Pos'] = hold_frame['Player'].map(map_dict['pos_map'])
|
374 |
st.session_state['player_frame'].insert(1, 'Pos', hold_frame['Pos'])
|
375 |
st.session_state['player_frame'] = st.session_state['player_frame'].dropna(subset=['Pos'])
|
376 |
if pos_select:
|
@@ -383,12 +384,12 @@ with tab2:
|
|
383 |
hide_index=True)
|
384 |
else:
|
385 |
|
386 |
-
st.session_state['player_frame'] = create_player_exposures(
|
387 |
hold_frame = st.session_state['player_frame'].copy()
|
388 |
if sport_select == 'GOLF':
|
389 |
hold_frame['Pos'] = 'G'
|
390 |
else:
|
391 |
-
hold_frame['Pos'] = hold_frame['Player'].map(map_dict['pos_map'])
|
392 |
st.session_state['player_frame'].insert(1, 'Pos', hold_frame['Pos'])
|
393 |
st.session_state['player_frame'] = st.session_state['player_frame'].dropna(subset=['Pos'])
|
394 |
if pos_select:
|
@@ -401,15 +402,15 @@ with tab2:
|
|
401 |
hide_index=True)
|
402 |
with tab2:
|
403 |
|
404 |
-
if entry_parse_var == 'All':
|
405 |
-
st.session_state['stack_frame'] = create_stack_exposures(
|
406 |
st.dataframe(st.session_state['stack_frame'].
|
407 |
sort_values(by='Exposure Overall', ascending=False).
|
408 |
style.background_gradient(cmap='RdYlGn').
|
409 |
format(formatter='{:.2%}', subset=st.session_state['stack_frame'].iloc[:, 1:].select_dtypes(include=['number']).columns),
|
410 |
hide_index=True)
|
411 |
else:
|
412 |
-
st.session_state['stack_frame'] = create_stack_exposures(
|
413 |
st.dataframe(st.session_state['stack_frame'].
|
414 |
sort_values(by='Exposure Overall', ascending=False).
|
415 |
style.background_gradient(cmap='RdYlGn').
|
@@ -417,15 +418,15 @@ with tab2:
|
|
417 |
hide_index=True)
|
418 |
with tab3:
|
419 |
|
420 |
-
if entry_parse_var == 'All':
|
421 |
-
st.session_state['stack_size_frame'] = create_stack_size_exposures(
|
422 |
st.dataframe(st.session_state['stack_size_frame'].
|
423 |
sort_values(by='Exposure Overall', ascending=False).
|
424 |
style.background_gradient(cmap='RdYlGn').
|
425 |
format(formatter='{:.2%}', subset=st.session_state['stack_size_frame'].iloc[:, 1:].select_dtypes(include=['number']).columns),
|
426 |
hide_index=True)
|
427 |
else:
|
428 |
-
st.session_state['stack_size_frame'] = create_stack_size_exposures(
|
429 |
st.dataframe(st.session_state['stack_size_frame'].
|
430 |
sort_values(by='Exposure Overall', ascending=False).
|
431 |
style.background_gradient(cmap='RdYlGn').
|
@@ -434,12 +435,12 @@ with tab2:
|
|
434 |
|
435 |
with tab4:
|
436 |
|
437 |
-
if entry_parse_var == 'All':
|
438 |
-
st.session_state['general_frame'] = create_general_exposures(
|
439 |
st.dataframe(st.session_state['general_frame'].style.background_gradient(cmap='RdYlGn', axis=1).format(precision=2), hide_index=True)
|
440 |
|
441 |
else:
|
442 |
-
st.session_state['general_frame'] = create_general_exposures(
|
443 |
st.dataframe(st.session_state['general_frame'].style.background_gradient(cmap='RdYlGn', axis=1).format(precision=2), hide_index=True)
|
444 |
|
445 |
with tab5:
|
@@ -448,7 +449,7 @@ with tab2:
|
|
448 |
with col1:
|
449 |
user_dupe_var = st.selectbox("Which usage(s) would you like to view?", ['All', 'Specific'], key='user_dupe_var')
|
450 |
with col2:
|
451 |
-
user_dupe_select = st.multiselect("Select your user(s)",
|
452 |
submitted = st.form_submit_button("Submit")
|
453 |
if submitted:
|
454 |
if user_dupe_var == 'Specific':
|
|
|
150 |
with tab2:
|
151 |
excluded_cols = ['BaseName', 'EntryCount']
|
152 |
if 'Contest' in st.session_state and 'duplication_frame' not in st.session_state:
|
153 |
+
st.session_state['player_columns'] = [col for col in st.session_state['Contest'].columns if col not in excluded_cols]
|
154 |
+
for col in st.session_state['player_columns']:
|
155 |
st.session_state['Contest'][col] = st.session_state['Contest'][col].astype(str)
|
156 |
|
157 |
# Create mapping dictionaries
|
158 |
+
st.session_state['map_dict'] = {
|
159 |
'pos_map': st.session_state['pos_dict'],
|
160 |
'team_map': st.session_state['team_dict'],
|
161 |
'salary_map': st.session_state['salary_dict'],
|
|
|
168 |
if type_var == 'Classic':
|
169 |
working_df['stack'] = working_df.apply(
|
170 |
lambda row: Counter(
|
171 |
+
st.session_state['map_dict']['team_map'].get(player, '') for player in row[4:]
|
172 |
+
if st.session_state['map_dict']['team_map'].get(player, '') != ''
|
173 |
+
).most_common(1)[0][0] if any(st.session_state['map_dict']['team_map'].get(player, '') for player in row[4:]) else '',
|
174 |
axis=1
|
175 |
)
|
176 |
working_df['stack_size'] = working_df.apply(
|
177 |
lambda row: Counter(
|
178 |
+
st.session_state['map_dict']['team_map'].get(player, '') for player in row[4:]
|
179 |
+
if st.session_state['map_dict']['team_map'].get(player, '') != ''
|
180 |
+
).most_common(1)[0][1] if any(st.session_state['map_dict']['team_map'].get(player, '') for player in row[4:]) else '',
|
181 |
axis=1
|
182 |
)
|
183 |
+
working_df['salary'] = working_df.apply(lambda row: sum(st.session_state['map_dict']['salary_map'].get(player, 0) for player in row), axis=1)
|
184 |
working_df['actual_fpts'] = working_df.apply(lambda row: sum(st.session_state['actual_dict'].get(player, 0) for player in row), axis=1)
|
185 |
working_df['actual_own'] = working_df.apply(lambda row: sum(st.session_state['ownership_dict'].get(player, 0) for player in row), axis=1)
|
186 |
+
working_df['sorted'] = working_df[st.session_state['player_columns']].apply(
|
187 |
lambda row: ','.join(sorted(row.values)),
|
188 |
axis=1
|
189 |
)
|
|
|
209 |
elif type_var == 'Showdown':
|
210 |
working_df['stack'] = working_df.apply(
|
211 |
lambda row: Counter(
|
212 |
+
st.session_state['map_dict']['team_map'].get(player, '') for player in row[2:]
|
213 |
+
if st.session_state['map_dict']['team_map'].get(player, '') != ''
|
214 |
+
).most_common(1)[0][0] if any(st.session_state['map_dict']['team_map'].get(player, '') for player in row[2:]) else '',
|
215 |
axis=1
|
216 |
)
|
217 |
working_df['stack_size'] = working_df.apply(
|
218 |
lambda row: Counter(
|
219 |
+
st.session_state['map_dict']['team_map'].get(player, '') for player in row[2:]
|
220 |
+
if st.session_state['map_dict']['team_map'].get(player, '') != ''
|
221 |
+
).most_common(1)[0][1] if any(st.session_state['map_dict']['team_map'].get(player, '') for player in row[2:]) else '',
|
222 |
axis=1
|
223 |
)
|
224 |
# Modified salary calculation with 1.5x multiplier for first player
|
225 |
working_df['salary'] = working_df.apply(
|
226 |
+
lambda row: (st.session_state['map_dict']['salary_map'].get(row[2], 0) * 1.5) +
|
227 |
+
sum(st.session_state['map_dict']['salary_map'].get(player, 0) for player in row[3:]),
|
228 |
axis=1
|
229 |
)
|
230 |
# Modified actual_fpts calculation with 1.5x multiplier for first player
|
|
|
234 |
axis=1
|
235 |
)
|
236 |
working_df['actual_own'] = working_df.apply(lambda row: sum(st.session_state['ownership_dict'].get(player, 0) for player in row), axis=1)
|
237 |
+
working_df['sorted'] = working_df[st.session_state['player_columns']].apply(
|
238 |
lambda row: ','.join(sorted(row.values)),
|
239 |
axis=1
|
240 |
)
|
|
|
257 |
working_df['finish'] = working_df['index']
|
258 |
working_df = working_df.drop(['sorted', 'index'], axis=1)
|
259 |
# working_df['stack_size'] = working_df['stack_size'].fillna(1).astype(int)
|
260 |
+
st.session_state['field_player_frame'] = create_player_exposures(working_df, st.session_state['player_columns'])
|
261 |
st.session_state['field_stack_frame'] = create_stack_exposures(working_df)
|
262 |
+
st.session_state['display_contest_info'] = working_df.copy()
|
263 |
|
264 |
with st.expander("Info and filters"):
|
265 |
st.info("Note that any filtering here needs to be reset manually, i.e. if you parse down the specific users and want to reset the table, just backtrack your filtering by setting it back to 'All'")
|
|
|
269 |
with st.form(key='filter_form'):
|
270 |
users_var, entries_var, stack_var, stack_size_var, player_var = st.columns(5)
|
271 |
with users_var:
|
272 |
+
st.session_state['entry_parse_var'] = st.selectbox("Do you want to view a specific user(s)?", ['All', 'Specific'], key = 'entry_parse_var')
|
273 |
+
st.session_state['entry_names'] = st.multiselect("Select players", options=st.session_state['entry_list'], default=[], key = 'entry_names')
|
274 |
with entries_var:
|
275 |
+
st.session_state['low_entries_var'] = st.number_input("Low end of entries range", min_value=0, max_value=150, value=1, key = 'low_entries_var')
|
276 |
+
st.session_state['high_entries_var'] = st.number_input("High end of entries range", min_value=0, max_value=150, value=150, key = 'high_entries_var')
|
277 |
with stack_var:
|
278 |
+
st.session_state['stack_parse_var'] = st.selectbox("Do you want to view lineups with specific team(s)?", ['All', 'Specific'], key = 'stack_parse_var')
|
279 |
+
st.session_state['stack_names'] = st.multiselect("Select teams", options=st.session_state['display_contest_info']['stack'].unique(), default=[], key = 'stack_names')
|
280 |
with stack_size_var:
|
281 |
+
st.session_state['stack_size_parse_var'] = st.selectbox("Do you want to view a specific stack size(s)?", ['All', 'Specific'], key = 'stack_size_parse_var')
|
282 |
+
st.session_state['stack_size_names'] = st.multiselect("Select stack sizes", options=st.session_state['display_contest_info']['stack_size'].unique(), default=[], key = 'stack_size_names')
|
283 |
with player_var:
|
284 |
+
st.session_state['unique_players'] = pd.unique(st.session_state['display_contest_info'][st.session_state['player_columns']].values.ravel('K'))
|
285 |
+
st.session_state['unique_players'] = [p for p in st.session_state['unique_players'] if p != 'nan'] # Remove any NaN values
|
286 |
+
st.session_state['player_parse_var'] = st.selectbox("Do you want to view lineups with specific player(s)?", ['All', 'Specific'], key = 'player_parse_var')
|
287 |
+
st.session_state['player_names'] = st.multiselect("Select players", options=st.session_state['unique_players'], default=[], key = 'player_names')
|
288 |
submitted = st.form_submit_button("Submit")
|
289 |
if submitted:
|
290 |
if 'player_frame' in st.session_state:
|
|
|
292 |
if 'stack_frame' in st.session_state:
|
293 |
del st.session_state['stack_frame']
|
294 |
|
295 |
+
if st.session_state['entry_parse_var'] == 'Specific' and st.session_state['entry_names']:
|
296 |
+
st.session_state['display_contest_info'] = st.session_state['display_contest_info'][st.session_state['display_contest_info']['BaseName'].isin(st.session_state['entry_names'])]
|
297 |
+
if st.session_state['stack_parse_var'] == 'Specific' and st.session_state['stack_names']:
|
298 |
+
st.session_state['display_contest_info'] = st.session_state['display_contest_info'][st.session_state['display_contest_info']['stack'].isin(st.session_state['stack_names'])]
|
299 |
+
if st.session_state['stack_size_parse_var'] == 'Specific' and st.session_state['stack_size_names']:
|
300 |
+
st.session_state['display_contest_info'] = st.session_state['display_contest_info'][st.session_state['display_contest_info']['stack_size'].isin(st.session_state['stack_size_names'])]
|
301 |
+
if st.session_state['player_parse_var'] == 'Specific' and st.session_state['player_names']:
|
302 |
+
mask = st.session_state['display_contest_info'][st.session_state['player_columns']].apply(lambda row: all(player in row.values for player in st.session_state['player_names']), axis=1)
|
303 |
+
st.session_state['display_contest_info'] = st.session_state['display_contest_info'][mask]
|
304 |
+
if st.session_state['low_entries_var'] and st.session_state['high_entries_var']:
|
305 |
+
st.session_state['display_contest_info'] = st.session_state['display_contest_info'][st.session_state['display_contest_info']['EntryCount'].between(st.session_state['low_entries_var'], st.session_state['high_entries_var'])]
|
306 |
|
307 |
# Initialize pagination in session state if not exists
|
308 |
if 'current_page' not in st.session_state:
|
|
|
310 |
|
311 |
# Calculate total pages
|
312 |
rows_per_page = 500
|
313 |
+
total_rows = len(st.session_state['display_contest_info'])
|
314 |
total_pages = (total_rows + rows_per_page - 1) // rows_per_page
|
315 |
|
316 |
# Create pagination controls in a single row
|
|
|
338 |
start_idx = (st.session_state.current_page - 1) * rows_per_page
|
339 |
end_idx = min((st.session_state.current_page) * rows_per_page, total_rows)
|
340 |
st.dataframe(
|
341 |
+
st.session_state['display_contest_info'].iloc[start_idx:end_idx].style
|
342 |
.background_gradient(axis=0)
|
343 |
.background_gradient(cmap='RdYlGn')
|
344 |
.format(precision=2),
|
|
|
364 |
else:
|
365 |
pos_select = None
|
366 |
|
367 |
+
if st.session_state['entry_parse_var'] == 'All':
|
368 |
|
369 |
+
st.session_state['player_frame'] = create_player_exposures(st.session_state['display_contest_info'], st.session_state['player_columns'])
|
370 |
hold_frame = st.session_state['player_frame'].copy()
|
371 |
if sport_select == 'GOLF':
|
372 |
hold_frame['Pos'] = 'G'
|
373 |
else:
|
374 |
+
hold_frame['Pos'] = hold_frame['Player'].map(st.session_state['map_dict']['pos_map'])
|
375 |
st.session_state['player_frame'].insert(1, 'Pos', hold_frame['Pos'])
|
376 |
st.session_state['player_frame'] = st.session_state['player_frame'].dropna(subset=['Pos'])
|
377 |
if pos_select:
|
|
|
384 |
hide_index=True)
|
385 |
else:
|
386 |
|
387 |
+
st.session_state['player_frame'] = create_player_exposures(st.session_state['display_contest_info'], st.session_state['player_columns'], st.session_state['entry_names'])
|
388 |
hold_frame = st.session_state['player_frame'].copy()
|
389 |
if sport_select == 'GOLF':
|
390 |
hold_frame['Pos'] = 'G'
|
391 |
else:
|
392 |
+
hold_frame['Pos'] = hold_frame['Player'].map(st.session_state['map_dict']['pos_map'])
|
393 |
st.session_state['player_frame'].insert(1, 'Pos', hold_frame['Pos'])
|
394 |
st.session_state['player_frame'] = st.session_state['player_frame'].dropna(subset=['Pos'])
|
395 |
if pos_select:
|
|
|
402 |
hide_index=True)
|
403 |
with tab2:
|
404 |
|
405 |
+
if st.session_state['entry_parse_var'] == 'All':
|
406 |
+
st.session_state['stack_frame'] = create_stack_exposures(st.session_state['display_contest_info'])
|
407 |
st.dataframe(st.session_state['stack_frame'].
|
408 |
sort_values(by='Exposure Overall', ascending=False).
|
409 |
style.background_gradient(cmap='RdYlGn').
|
410 |
format(formatter='{:.2%}', subset=st.session_state['stack_frame'].iloc[:, 1:].select_dtypes(include=['number']).columns),
|
411 |
hide_index=True)
|
412 |
else:
|
413 |
+
st.session_state['stack_frame'] = create_stack_exposures(st.session_state['display_contest_info'], st.session_state['entry_names'])
|
414 |
st.dataframe(st.session_state['stack_frame'].
|
415 |
sort_values(by='Exposure Overall', ascending=False).
|
416 |
style.background_gradient(cmap='RdYlGn').
|
|
|
418 |
hide_index=True)
|
419 |
with tab3:
|
420 |
|
421 |
+
if st.session_state['entry_parse_var'] == 'All':
|
422 |
+
st.session_state['stack_size_frame'] = create_stack_size_exposures(st.session_state['display_contest_info'])
|
423 |
st.dataframe(st.session_state['stack_size_frame'].
|
424 |
sort_values(by='Exposure Overall', ascending=False).
|
425 |
style.background_gradient(cmap='RdYlGn').
|
426 |
format(formatter='{:.2%}', subset=st.session_state['stack_size_frame'].iloc[:, 1:].select_dtypes(include=['number']).columns),
|
427 |
hide_index=True)
|
428 |
else:
|
429 |
+
st.session_state['stack_size_frame'] = create_stack_size_exposures(st.session_state['display_contest_info'], st.session_state['entry_names'])
|
430 |
st.dataframe(st.session_state['stack_size_frame'].
|
431 |
sort_values(by='Exposure Overall', ascending=False).
|
432 |
style.background_gradient(cmap='RdYlGn').
|
|
|
435 |
|
436 |
with tab4:
|
437 |
|
438 |
+
if st.session_state['entry_parse_var'] == 'All':
|
439 |
+
st.session_state['general_frame'] = create_general_exposures(st.session_state['display_contest_info'])
|
440 |
st.dataframe(st.session_state['general_frame'].style.background_gradient(cmap='RdYlGn', axis=1).format(precision=2), hide_index=True)
|
441 |
|
442 |
else:
|
443 |
+
st.session_state['general_frame'] = create_general_exposures(st.session_state['display_contest_info'], st.session_state['entry_names'])
|
444 |
st.dataframe(st.session_state['general_frame'].style.background_gradient(cmap='RdYlGn', axis=1).format(precision=2), hide_index=True)
|
445 |
|
446 |
with tab5:
|
|
|
449 |
with col1:
|
450 |
user_dupe_var = st.selectbox("Which usage(s) would you like to view?", ['All', 'Specific'], key='user_dupe_var')
|
451 |
with col2:
|
452 |
+
user_dupe_select = st.multiselect("Select your user(s)", st.session_state['display_contest_info']['BaseName'].sort_values().unique(), key='user_dupe_select')
|
453 |
submitted = st.form_submit_button("Submit")
|
454 |
if submitted:
|
455 |
if user_dupe_var == 'Specific':
|