James McCool
commited on
Commit
·
e43f97d
1
Parent(s):
4955178
Refactor player statistics calculation in app.py to streamline logic for 'Showdown' and 'Classic' formats. Introduce session state management for player exposures when the source is 'Portfolio', enhancing lineup generation accuracy and user experience.
Browse files
app.py
CHANGED
@@ -1242,42 +1242,10 @@ with tab2:
|
|
1242 |
player_stats = []
|
1243 |
player_columns = [col for col in display_frame.columns if col not in excluded_cols]
|
1244 |
|
1245 |
-
if
|
1246 |
-
|
1247 |
-
# Create mask for lineups where this player is Captain (first column)
|
1248 |
-
cpt_mask = display_frame[player_columns[0]] == player
|
1249 |
-
|
1250 |
-
if cpt_mask.any():
|
1251 |
-
player_stats.append({
|
1252 |
-
'Player': f"{player} (CPT)",
|
1253 |
-
'Lineup Count': cpt_mask.sum(),
|
1254 |
-
'Exposure': cpt_mask.sum() / len(display_frame),
|
1255 |
-
'Avg Median': display_frame[cpt_mask]['median'].mean(),
|
1256 |
-
'Avg Own': display_frame[cpt_mask]['Own'].mean(),
|
1257 |
-
'Avg Dupes': display_frame[cpt_mask]['Dupes'].mean(),
|
1258 |
-
'Avg Finish %': display_frame[cpt_mask]['Finish_percentile'].mean(),
|
1259 |
-
'Avg Lineup Edge': display_frame[cpt_mask]['Lineup Edge'].mean(),
|
1260 |
-
})
|
1261 |
-
|
1262 |
-
# Create mask for lineups where this player is FLEX (other columns)
|
1263 |
-
flex_mask = display_frame[player_columns[1:]].apply(
|
1264 |
-
lambda row: player in list(row), axis=1
|
1265 |
-
)
|
1266 |
-
|
1267 |
-
if flex_mask.any():
|
1268 |
-
player_stats.append({
|
1269 |
-
'Player': f"{player} (FLEX)",
|
1270 |
-
'Lineup Count': flex_mask.sum(),
|
1271 |
-
'Exposure': flex_mask.sum() / len(display_frame),
|
1272 |
-
'Avg Median': display_frame[flex_mask]['median'].mean(),
|
1273 |
-
'Avg Own': display_frame[flex_mask]['Own'].mean(),
|
1274 |
-
'Avg Dupes': display_frame[flex_mask]['Dupes'].mean(),
|
1275 |
-
'Avg Finish %': display_frame[flex_mask]['Finish_percentile'].mean(),
|
1276 |
-
'Avg Lineup Edge': display_frame[flex_mask]['Lineup Edge'].mean(),
|
1277 |
-
})
|
1278 |
else:
|
1279 |
-
if
|
1280 |
-
# Handle Captain positions
|
1281 |
for player in player_names:
|
1282 |
# Create mask for lineups where this player is Captain (first column)
|
1283 |
cpt_mask = display_frame[player_columns[0]] == player
|
@@ -1310,27 +1278,65 @@ with tab2:
|
|
1310 |
'Avg Finish %': display_frame[flex_mask]['Finish_percentile'].mean(),
|
1311 |
'Avg Lineup Edge': display_frame[flex_mask]['Lineup Edge'].mean(),
|
1312 |
})
|
1313 |
-
|
1314 |
-
|
1315 |
-
|
1316 |
-
|
1317 |
-
|
1318 |
-
|
1319 |
-
|
1320 |
-
|
1321 |
-
|
1322 |
-
|
1323 |
-
|
1324 |
-
|
1325 |
-
|
1326 |
-
|
1327 |
-
|
1328 |
-
|
1329 |
-
|
1330 |
-
|
1331 |
-
|
1332 |
-
|
1333 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1334 |
|
1335 |
st.subheader("Player Summary")
|
1336 |
st.dataframe(
|
|
|
1242 |
player_stats = []
|
1243 |
player_columns = [col for col in display_frame.columns if col not in excluded_cols]
|
1244 |
|
1245 |
+
if 'origin_player_exposures' in st.session_state and display_frame_source == 'Portfolio':
|
1246 |
+
player_summary = st.session_state['origin_player_exposures']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1247 |
else:
|
1248 |
+
if type_var == 'Showdown':
|
|
|
1249 |
for player in player_names:
|
1250 |
# Create mask for lineups where this player is Captain (first column)
|
1251 |
cpt_mask = display_frame[player_columns[0]] == player
|
|
|
1278 |
'Avg Finish %': display_frame[flex_mask]['Finish_percentile'].mean(),
|
1279 |
'Avg Lineup Edge': display_frame[flex_mask]['Lineup Edge'].mean(),
|
1280 |
})
|
1281 |
+
else:
|
1282 |
+
if sport_var == 'CS2':
|
1283 |
+
# Handle Captain positions
|
1284 |
+
for player in player_names:
|
1285 |
+
# Create mask for lineups where this player is Captain (first column)
|
1286 |
+
cpt_mask = display_frame[player_columns[0]] == player
|
1287 |
+
|
1288 |
+
if cpt_mask.any():
|
1289 |
+
player_stats.append({
|
1290 |
+
'Player': f"{player} (CPT)",
|
1291 |
+
'Lineup Count': cpt_mask.sum(),
|
1292 |
+
'Exposure': cpt_mask.sum() / len(display_frame),
|
1293 |
+
'Avg Median': display_frame[cpt_mask]['median'].mean(),
|
1294 |
+
'Avg Own': display_frame[cpt_mask]['Own'].mean(),
|
1295 |
+
'Avg Dupes': display_frame[cpt_mask]['Dupes'].mean(),
|
1296 |
+
'Avg Finish %': display_frame[cpt_mask]['Finish_percentile'].mean(),
|
1297 |
+
'Avg Lineup Edge': display_frame[cpt_mask]['Lineup Edge'].mean(),
|
1298 |
+
})
|
1299 |
+
|
1300 |
+
# Create mask for lineups where this player is FLEX (other columns)
|
1301 |
+
flex_mask = display_frame[player_columns[1:]].apply(
|
1302 |
+
lambda row: player in list(row), axis=1
|
1303 |
+
)
|
1304 |
+
|
1305 |
+
if flex_mask.any():
|
1306 |
+
player_stats.append({
|
1307 |
+
'Player': f"{player} (FLEX)",
|
1308 |
+
'Lineup Count': flex_mask.sum(),
|
1309 |
+
'Exposure': flex_mask.sum() / len(display_frame),
|
1310 |
+
'Avg Median': display_frame[flex_mask]['median'].mean(),
|
1311 |
+
'Avg Own': display_frame[flex_mask]['Own'].mean(),
|
1312 |
+
'Avg Dupes': display_frame[flex_mask]['Dupes'].mean(),
|
1313 |
+
'Avg Finish %': display_frame[flex_mask]['Finish_percentile'].mean(),
|
1314 |
+
'Avg Lineup Edge': display_frame[flex_mask]['Lineup Edge'].mean(),
|
1315 |
+
})
|
1316 |
+
elif sport_var != 'CS2':
|
1317 |
+
# Original Classic format processing
|
1318 |
+
for player in player_names:
|
1319 |
+
player_mask = display_frame[player_columns].apply(
|
1320 |
+
lambda row: player in list(row), axis=1
|
1321 |
+
)
|
1322 |
+
|
1323 |
+
if player_mask.any():
|
1324 |
+
player_stats.append({
|
1325 |
+
'Player': player,
|
1326 |
+
'Lineup Count': player_mask.sum(),
|
1327 |
+
'Exposure': player_mask.sum() / len(display_frame),
|
1328 |
+
'Avg Median': display_frame[player_mask]['median'].mean(),
|
1329 |
+
'Avg Own': display_frame[player_mask]['Own'].mean(),
|
1330 |
+
'Avg Dupes': display_frame[player_mask]['Dupes'].mean(),
|
1331 |
+
'Avg Finish %': display_frame[player_mask]['Finish_percentile'].mean(),
|
1332 |
+
'Avg Lineup Edge': display_frame[player_mask]['Lineup Edge'].mean(),
|
1333 |
+
})
|
1334 |
+
|
1335 |
+
player_summary = pd.DataFrame(player_stats)
|
1336 |
+
player_summary = player_summary.sort_values('Lineup Count', ascending=False)
|
1337 |
+
if display_frame_source == 'Portfolio':
|
1338 |
+
if 'origin_player_exposures' not in st.session_state:
|
1339 |
+
st.session_state['origin_player_exposures'] = player_summary.copy()
|
1340 |
|
1341 |
st.subheader("Player Summary")
|
1342 |
st.dataframe(
|