Spaces:
Running
Running
James McCool
commited on
Commit
·
4263647
1
Parent(s):
88a871a
Refactor player selection display in Handbuilder tab of app.py to utilize a dataframe for selected players, improving selection accuracy and user experience. Update summary row calculation to align with new selection method, ensuring accurate display of total salary, median, and ownership percentage.
Browse files
app.py
CHANGED
@@ -802,20 +802,17 @@ with tab3:
|
|
802 |
with tab4:
|
803 |
st.header("Handbuilder")
|
804 |
|
805 |
-
# Use a variable to control the key
|
806 |
if 'handbuilder_editor_key' not in st.session_state:
|
807 |
st.session_state.handbuilder_editor_key = 0
|
808 |
|
809 |
if st.button("Clear Data", key='clear_handbuild'):
|
810 |
-
st.session_state.handbuilder_editor_key += 1
|
811 |
-
# Reset all selections
|
812 |
-
st.session_state.handbuilder_editor_df = None
|
813 |
st.rerun()
|
814 |
|
815 |
# --- TEAM FILTER UI ---
|
816 |
all_teams = sorted(dk_roo['Team'].unique())
|
817 |
st.markdown("**Toggle teams to include:**")
|
818 |
-
team_cols = st.columns(len(all_teams) // 2 + 1)
|
819 |
|
820 |
selected_teams = []
|
821 |
for idx, team in enumerate(all_teams):
|
@@ -826,46 +823,27 @@ with tab4:
|
|
826 |
if checked:
|
827 |
selected_teams.append(team)
|
828 |
|
829 |
-
#
|
830 |
-
# Initialize or update the session state DataFrame
|
831 |
-
if 'handbuilder_editor_df' not in st.session_state or st.session_state.handbuilder_editor_df is None:
|
832 |
-
# Start with all players, all unchecked
|
833 |
-
base_df = dk_roo[['Player', 'Position', 'Team', 'Salary', 'Median', 'Order', 'Hand', 'Own%']].copy()
|
834 |
-
base_df['Select'] = False
|
835 |
-
st.session_state.handbuilder_editor_df = base_df
|
836 |
-
else:
|
837 |
-
# Make sure all players are present (in case teams change)
|
838 |
-
base_df = st.session_state.handbuilder_editor_df
|
839 |
-
|
840 |
-
# Filter by selected teams (or all if none selected)
|
841 |
if selected_teams:
|
842 |
-
|
|
|
|
|
843 |
else:
|
844 |
-
|
845 |
|
846 |
col1, col2 = st.columns([1, 2])
|
847 |
with col2:
|
848 |
st.subheader("Player Select")
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
help="Check to add player to lineup",
|
855 |
-
default=False
|
856 |
-
)
|
857 |
-
},
|
858 |
-
use_container_width=True,
|
859 |
-
hide_index=True,
|
860 |
-
key=f"handbuilder_editor_{st.session_state.handbuilder_editor_key}"
|
861 |
)
|
862 |
-
# Update the session state DataFrame with the new selections
|
863 |
-
# (merge back into the full base_df)
|
864 |
-
st.session_state.handbuilder_editor_df.update(edited_df)
|
865 |
|
866 |
-
#
|
867 |
-
|
868 |
-
select_players_disp =
|
869 |
|
870 |
with col1:
|
871 |
st.subheader("Lineup")
|
@@ -878,14 +856,11 @@ with tab4:
|
|
878 |
|
879 |
# --- SUMMARY ROW ---
|
880 |
if not select_players_disp.empty:
|
881 |
-
# Calculate sums
|
882 |
total_salary = select_players_disp['Salary'].sum()
|
883 |
total_median = select_players_disp['Median'].sum()
|
884 |
total_own = select_players_disp['Own%'].sum()
|
885 |
-
# Most common team
|
886 |
most_common_team = select_players_disp['Team'].mode()[0] if not select_players_disp['Team'].mode().empty else ""
|
887 |
|
888 |
-
# Create a summary row as a DataFrame
|
889 |
summary_row = pd.DataFrame({
|
890 |
'Player': ['TOTAL'],
|
891 |
'Team': [most_common_team],
|
@@ -893,16 +868,11 @@ with tab4:
|
|
893 |
'Median': [total_median],
|
894 |
'Own%': [total_own]
|
895 |
})
|
896 |
-
|
897 |
-
# Align columns with select_players_disp
|
898 |
summary_row = summary_row[select_players_disp.columns]
|
899 |
|
900 |
-
# Display the summary row
|
901 |
st.dataframe(
|
902 |
summary_row,
|
903 |
use_container_width=True,
|
904 |
height=50,
|
905 |
hide_index=True
|
906 |
-
)
|
907 |
-
|
908 |
-
|
|
|
802 |
with tab4:
|
803 |
st.header("Handbuilder")
|
804 |
|
|
|
805 |
if 'handbuilder_editor_key' not in st.session_state:
|
806 |
st.session_state.handbuilder_editor_key = 0
|
807 |
|
808 |
if st.button("Clear Data", key='clear_handbuild'):
|
809 |
+
st.session_state.handbuilder_editor_key += 1
|
|
|
|
|
810 |
st.rerun()
|
811 |
|
812 |
# --- TEAM FILTER UI ---
|
813 |
all_teams = sorted(dk_roo['Team'].unique())
|
814 |
st.markdown("**Toggle teams to include:**")
|
815 |
+
team_cols = st.columns(len(all_teams) // 2 + 1)
|
816 |
|
817 |
selected_teams = []
|
818 |
for idx, team in enumerate(all_teams):
|
|
|
823 |
if checked:
|
824 |
selected_teams.append(team)
|
825 |
|
826 |
+
# If no teams selected, show all teams
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
827 |
if selected_teams:
|
828 |
+
player_select_df = dk_roo[
|
829 |
+
dk_roo['Team'].isin(selected_teams)
|
830 |
+
][['Player', 'Position', 'Team', 'Salary', 'Median', 'Order', 'Hand', 'Own%']].copy()
|
831 |
else:
|
832 |
+
player_select_df = dk_roo[['Player', 'Position', 'Team', 'Salary', 'Median', 'Order', 'Hand', 'Own%']].copy()
|
833 |
|
834 |
col1, col2 = st.columns([1, 2])
|
835 |
with col2:
|
836 |
st.subheader("Player Select")
|
837 |
+
event = st.dataframe(
|
838 |
+
player_select_df,
|
839 |
+
key=f"handbuilder_editor_{st.session_state.handbuilder_editor_key}",
|
840 |
+
on_select="rerun",
|
841 |
+
selection_mode=["multi-row"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
842 |
)
|
|
|
|
|
|
|
843 |
|
844 |
+
# Get selected rows
|
845 |
+
selected_indices = event.selection["rows"] if event and "rows" in event.selection else []
|
846 |
+
select_players_disp = player_select_df.iloc[selected_indices][['Player', 'Team', 'Salary', 'Median', 'Own%']]
|
847 |
|
848 |
with col1:
|
849 |
st.subheader("Lineup")
|
|
|
856 |
|
857 |
# --- SUMMARY ROW ---
|
858 |
if not select_players_disp.empty:
|
|
|
859 |
total_salary = select_players_disp['Salary'].sum()
|
860 |
total_median = select_players_disp['Median'].sum()
|
861 |
total_own = select_players_disp['Own%'].sum()
|
|
|
862 |
most_common_team = select_players_disp['Team'].mode()[0] if not select_players_disp['Team'].mode().empty else ""
|
863 |
|
|
|
864 |
summary_row = pd.DataFrame({
|
865 |
'Player': ['TOTAL'],
|
866 |
'Team': [most_common_team],
|
|
|
868 |
'Median': [total_median],
|
869 |
'Own%': [total_own]
|
870 |
})
|
|
|
|
|
871 |
summary_row = summary_row[select_players_disp.columns]
|
872 |
|
|
|
873 |
st.dataframe(
|
874 |
summary_row,
|
875 |
use_container_width=True,
|
876 |
height=50,
|
877 |
hide_index=True
|
878 |
+
)
|
|
|
|