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
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
|
| 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 =
|
| 1144 |
|
| 1145 |
if cpt_mask.any():
|
| 1146 |
player_stats.append({
|
| 1147 |
'Player': f"{player} (CPT)",
|
| 1148 |
'Lineup Count': cpt_mask.sum(),
|
| 1149 |
-
'Avg Median':
|
| 1150 |
-
'Avg Own':
|
| 1151 |
-
'Avg Dupes':
|
| 1152 |
-
'Avg Finish %':
|
| 1153 |
-
'Avg Lineup Edge':
|
| 1154 |
})
|
| 1155 |
|
| 1156 |
# Create mask for lineups where this player is FLEX (other columns)
|
| 1157 |
-
flex_mask =
|
| 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':
|
| 1166 |
-
'Avg Own':
|
| 1167 |
-
'Avg Dupes':
|
| 1168 |
-
'Avg Finish %':
|
| 1169 |
-
'Avg Lineup Edge':
|
| 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 =
|
| 1177 |
|
| 1178 |
if cpt_mask.any():
|
| 1179 |
player_stats.append({
|
| 1180 |
'Player': f"{player} (CPT)",
|
| 1181 |
'Lineup Count': cpt_mask.sum(),
|
| 1182 |
-
'Avg Median':
|
| 1183 |
-
'Avg Own':
|
| 1184 |
-
'Avg Dupes':
|
| 1185 |
-
'Avg Finish %':
|
| 1186 |
-
'Avg Lineup Edge':
|
| 1187 |
})
|
| 1188 |
|
| 1189 |
# Create mask for lineups where this player is FLEX (other columns)
|
| 1190 |
-
flex_mask =
|
| 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':
|
| 1199 |
-
'Avg Own':
|
| 1200 |
-
'Avg Dupes':
|
| 1201 |
-
'Avg Finish %':
|
| 1202 |
-
'Avg Lineup Edge':
|
| 1203 |
})
|
| 1204 |
elif sport_var != 'CS2':
|
| 1205 |
# Original Classic format processing
|
| 1206 |
for player in player_names:
|
| 1207 |
-
player_mask =
|
| 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':
|
| 1216 |
-
'Avg Own':
|
| 1217 |
-
'Avg Dupes':
|
| 1218 |
-
'Avg Finish %':
|
| 1219 |
-
'Avg Lineup Edge':
|
| 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)
|