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)
|