James McCool commited on
Commit
9fdec5f
·
1 Parent(s): e5cc656

Refactor player statistics calculation in app.py: update references from working_frame to display_frame for improved clarity and consistency in player data processing, and add logic to drop duplicate entries in the export base upon addition.

Browse files
Files changed (1) hide show
  1. app.py +32 -31
app.py CHANGED
@@ -1086,6 +1086,7 @@ with tab2:
1086
  with merge_port:
1087
  if st.button("Add to export"):
1088
  st.session_state['export_base'] = pd.concat([st.session_state['export_base'], st.session_state['export_merge']])
 
1089
  else:
1090
  st.error("No portfolio to download")
1091
 
@@ -1135,26 +1136,26 @@ with tab2:
1135
 
1136
  # Create player summary dataframe
1137
  player_stats = []
1138
- player_columns = [col for col in st.session_state['working_frame'].columns if col not in excluded_cols]
1139
 
1140
  if type_var == 'Showdown':
1141
  for player in player_names:
1142
  # Create mask for lineups where this player is Captain (first column)
1143
- cpt_mask = st.session_state['working_frame'][player_columns[0]] == player
1144
 
1145
  if cpt_mask.any():
1146
  player_stats.append({
1147
  'Player': f"{player} (CPT)",
1148
  'Lineup Count': cpt_mask.sum(),
1149
- 'Avg Median': st.session_state['working_frame'][cpt_mask]['median'].mean(),
1150
- 'Avg Own': st.session_state['working_frame'][cpt_mask]['Own'].mean(),
1151
- 'Avg Dupes': st.session_state['working_frame'][cpt_mask]['Dupes'].mean(),
1152
- 'Avg Finish %': st.session_state['working_frame'][cpt_mask]['Finish_percentile'].mean(),
1153
- 'Avg Lineup Edge': st.session_state['working_frame'][cpt_mask]['Lineup Edge'].mean(),
1154
  })
1155
 
1156
  # Create mask for lineups where this player is FLEX (other columns)
1157
- flex_mask = st.session_state['working_frame'][player_columns[1:]].apply(
1158
  lambda row: player in list(row), axis=1
1159
  )
1160
 
@@ -1162,32 +1163,32 @@ with tab2:
1162
  player_stats.append({
1163
  'Player': f"{player} (FLEX)",
1164
  'Lineup Count': flex_mask.sum(),
1165
- 'Avg Median': st.session_state['working_frame'][flex_mask]['median'].mean(),
1166
- 'Avg Own': st.session_state['working_frame'][flex_mask]['Own'].mean(),
1167
- 'Avg Dupes': st.session_state['working_frame'][flex_mask]['Dupes'].mean(),
1168
- 'Avg Finish %': st.session_state['working_frame'][flex_mask]['Finish_percentile'].mean(),
1169
- 'Avg Lineup Edge': st.session_state['working_frame'][flex_mask]['Lineup Edge'].mean(),
1170
  })
1171
  else:
1172
  if sport_var == 'CS2':
1173
  # Handle Captain positions
1174
  for player in player_names:
1175
  # Create mask for lineups where this player is Captain (first column)
1176
- cpt_mask = st.session_state['working_frame'][player_columns[0]] == player
1177
 
1178
  if cpt_mask.any():
1179
  player_stats.append({
1180
  'Player': f"{player} (CPT)",
1181
  'Lineup Count': cpt_mask.sum(),
1182
- 'Avg Median': st.session_state['working_frame'][cpt_mask]['median'].mean(),
1183
- 'Avg Own': st.session_state['working_frame'][cpt_mask]['Own'].mean(),
1184
- 'Avg Dupes': st.session_state['working_frame'][cpt_mask]['Dupes'].mean(),
1185
- 'Avg Finish %': st.session_state['working_frame'][cpt_mask]['Finish_percentile'].mean(),
1186
- 'Avg Lineup Edge': st.session_state['working_frame'][cpt_mask]['Lineup Edge'].mean(),
1187
  })
1188
 
1189
  # Create mask for lineups where this player is FLEX (other columns)
1190
- flex_mask = st.session_state['working_frame'][player_columns[1:]].apply(
1191
  lambda row: player in list(row), axis=1
1192
  )
1193
 
@@ -1195,16 +1196,16 @@ with tab2:
1195
  player_stats.append({
1196
  'Player': f"{player} (FLEX)",
1197
  'Lineup Count': flex_mask.sum(),
1198
- 'Avg Median': st.session_state['working_frame'][flex_mask]['median'].mean(),
1199
- 'Avg Own': st.session_state['working_frame'][flex_mask]['Own'].mean(),
1200
- 'Avg Dupes': st.session_state['working_frame'][flex_mask]['Dupes'].mean(),
1201
- 'Avg Finish %': st.session_state['working_frame'][flex_mask]['Finish_percentile'].mean(),
1202
- 'Avg Lineup Edge': st.session_state['working_frame'][flex_mask]['Lineup Edge'].mean(),
1203
  })
1204
  elif sport_var != 'CS2':
1205
  # Original Classic format processing
1206
  for player in player_names:
1207
- player_mask = st.session_state['working_frame'][player_columns].apply(
1208
  lambda row: player in list(row), axis=1
1209
  )
1210
 
@@ -1212,11 +1213,11 @@ with tab2:
1212
  player_stats.append({
1213
  'Player': player,
1214
  'Lineup Count': player_mask.sum(),
1215
- 'Avg Median': st.session_state['working_frame'][player_mask]['median'].mean(),
1216
- 'Avg Own': st.session_state['working_frame'][player_mask]['Own'].mean(),
1217
- 'Avg Dupes': st.session_state['working_frame'][player_mask]['Dupes'].mean(),
1218
- 'Avg Finish %': st.session_state['working_frame'][player_mask]['Finish_percentile'].mean(),
1219
- 'Avg Lineup Edge': st.session_state['working_frame'][player_mask]['Lineup Edge'].mean(),
1220
  })
1221
 
1222
  player_summary = pd.DataFrame(player_stats)
 
1086
  with merge_port:
1087
  if st.button("Add to export"):
1088
  st.session_state['export_base'] = pd.concat([st.session_state['export_base'], st.session_state['export_merge']])
1089
+ st.session_state['export_base'] = st.session_state['export_base'].drop_duplicates()
1090
  else:
1091
  st.error("No portfolio to download")
1092
 
 
1136
 
1137
  # Create player summary dataframe
1138
  player_stats = []
1139
+ player_columns = [col for col in display_frame.columns if col not in excluded_cols]
1140
 
1141
  if type_var == 'Showdown':
1142
  for player in player_names:
1143
  # Create mask for lineups where this player is Captain (first column)
1144
+ cpt_mask = display_frame[player_columns[0]] == player
1145
 
1146
  if cpt_mask.any():
1147
  player_stats.append({
1148
  'Player': f"{player} (CPT)",
1149
  'Lineup Count': cpt_mask.sum(),
1150
+ 'Avg Median': display_frame[cpt_mask]['median'].mean(),
1151
+ 'Avg Own': display_frame[cpt_mask]['Own'].mean(),
1152
+ 'Avg Dupes': display_frame[cpt_mask]['Dupes'].mean(),
1153
+ 'Avg Finish %': display_frame[cpt_mask]['Finish_percentile'].mean(),
1154
+ 'Avg Lineup Edge': display_frame[cpt_mask]['Lineup Edge'].mean(),
1155
  })
1156
 
1157
  # Create mask for lineups where this player is FLEX (other columns)
1158
+ flex_mask = display_frame[player_columns[1:]].apply(
1159
  lambda row: player in list(row), axis=1
1160
  )
1161
 
 
1163
  player_stats.append({
1164
  'Player': f"{player} (FLEX)",
1165
  'Lineup Count': flex_mask.sum(),
1166
+ 'Avg Median': display_frame[flex_mask]['median'].mean(),
1167
+ 'Avg Own': display_frame[flex_mask]['Own'].mean(),
1168
+ 'Avg Dupes': display_frame[flex_mask]['Dupes'].mean(),
1169
+ 'Avg Finish %': display_frame[flex_mask]['Finish_percentile'].mean(),
1170
+ 'Avg Lineup Edge': display_frame[flex_mask]['Lineup Edge'].mean(),
1171
  })
1172
  else:
1173
  if sport_var == 'CS2':
1174
  # Handle Captain positions
1175
  for player in player_names:
1176
  # Create mask for lineups where this player is Captain (first column)
1177
+ cpt_mask = display_frame[player_columns[0]] == player
1178
 
1179
  if cpt_mask.any():
1180
  player_stats.append({
1181
  'Player': f"{player} (CPT)",
1182
  'Lineup Count': cpt_mask.sum(),
1183
+ 'Avg Median': display_frame[cpt_mask]['median'].mean(),
1184
+ 'Avg Own': display_frame[cpt_mask]['Own'].mean(),
1185
+ 'Avg Dupes': display_frame[cpt_mask]['Dupes'].mean(),
1186
+ 'Avg Finish %': display_frame[cpt_mask]['Finish_percentile'].mean(),
1187
+ 'Avg Lineup Edge': display_frame[cpt_mask]['Lineup Edge'].mean(),
1188
  })
1189
 
1190
  # Create mask for lineups where this player is FLEX (other columns)
1191
+ flex_mask = display_frame[player_columns[1:]].apply(
1192
  lambda row: player in list(row), axis=1
1193
  )
1194
 
 
1196
  player_stats.append({
1197
  'Player': f"{player} (FLEX)",
1198
  'Lineup Count': flex_mask.sum(),
1199
+ 'Avg Median': display_frame[flex_mask]['median'].mean(),
1200
+ 'Avg Own': display_frame[flex_mask]['Own'].mean(),
1201
+ 'Avg Dupes': display_frame[flex_mask]['Dupes'].mean(),
1202
+ 'Avg Finish %': display_frame[flex_mask]['Finish_percentile'].mean(),
1203
+ 'Avg Lineup Edge': display_frame[flex_mask]['Lineup Edge'].mean(),
1204
  })
1205
  elif sport_var != 'CS2':
1206
  # Original Classic format processing
1207
  for player in player_names:
1208
+ player_mask = display_frame[player_columns].apply(
1209
  lambda row: player in list(row), axis=1
1210
  )
1211
 
 
1213
  player_stats.append({
1214
  'Player': player,
1215
  'Lineup Count': player_mask.sum(),
1216
+ 'Avg Median': display_frame[player_mask]['median'].mean(),
1217
+ 'Avg Own': display_frame[player_mask]['Own'].mean(),
1218
+ 'Avg Dupes': display_frame[player_mask]['Dupes'].mean(),
1219
+ 'Avg Finish %': display_frame[player_mask]['Finish_percentile'].mean(),
1220
+ 'Avg Lineup Edge': display_frame[player_mask]['Lineup Edge'].mean(),
1221
  })
1222
 
1223
  player_summary = pd.DataFrame(player_stats)