James McCool
commited on
Commit
·
ab4dc7d
1
Parent(s):
95b2e04
Update export logic in app.py: introduce a new session state variable to store a copy of the portfolio for export, ensuring accurate data handling when adding to the export base and improving display options for paginated data.
Browse files
app.py
CHANGED
|
@@ -1022,6 +1022,7 @@ with tab2:
|
|
| 1022 |
)
|
| 1023 |
st.session_state['portfolio'] = st.session_state['portfolio'][lock_mask]
|
| 1024 |
st.session_state['portfolio'] = st.session_state['portfolio'].sort_values(by='median', ascending=False)
|
|
|
|
| 1025 |
with st.expander("Download options"):
|
| 1026 |
if stack_dict is not None:
|
| 1027 |
download_type = st.selectbox("Simple or Advanced Download?", options=['Simple', 'Advanced'], key='download_choice')
|
|
@@ -1105,60 +1106,53 @@ with tab2:
|
|
| 1105 |
st.download_button(label="Download Portfolio", data=st.session_state['export_file'].to_csv(index=False), file_name="portfolio.csv", mime="text/csv")
|
| 1106 |
with merge_port:
|
| 1107 |
if st.button("Add to export"):
|
| 1108 |
-
st.session_state['export_base'] = pd.concat([st.session_state['export_base'], st.session_state['
|
| 1109 |
else:
|
| 1110 |
st.error("No portfolio to download")
|
| 1111 |
|
| 1112 |
display_frame_source = st.selectbox("Display:", options=['Portfolio', 'Export Base'], key='display_frame_source')
|
| 1113 |
if display_frame_source == 'Portfolio':
|
| 1114 |
-
|
| 1115 |
-
|
| 1116 |
-
|
|
|
|
|
|
|
|
|
|
| 1117 |
|
| 1118 |
-
|
| 1119 |
-
|
| 1120 |
-
|
| 1121 |
|
| 1122 |
-
|
| 1123 |
-
|
| 1124 |
-
|
| 1125 |
-
|
| 1126 |
-
|
| 1127 |
-
|
| 1128 |
-
|
| 1129 |
-
|
| 1130 |
-
|
| 1131 |
-
|
| 1132 |
-
|
| 1133 |
-
|
| 1134 |
-
|
| 1135 |
|
| 1136 |
-
|
| 1137 |
-
|
| 1138 |
-
|
| 1139 |
|
| 1140 |
-
|
| 1141 |
-
|
| 1142 |
-
|
| 1143 |
-
|
| 1144 |
-
|
| 1145 |
-
|
| 1146 |
-
|
| 1147 |
-
|
| 1148 |
-
|
| 1149 |
-
|
| 1150 |
-
|
| 1151 |
-
|
| 1152 |
-
elif display_frame_source == 'Export Base':
|
| 1153 |
-
st.dataframe(
|
| 1154 |
-
st.session_state['export_base'].style
|
| 1155 |
-
.background_gradient(axis=0)
|
| 1156 |
-
.background_gradient(cmap='RdYlGn')
|
| 1157 |
-
.background_gradient(cmap='RdYlGn_r', subset=['Finish_percentile', 'Own', 'Dupes'])
|
| 1158 |
-
.format(freq_format, precision=2),
|
| 1159 |
-
height=1000,
|
| 1160 |
-
use_container_width=True
|
| 1161 |
-
)
|
| 1162 |
|
| 1163 |
# Create player summary dataframe
|
| 1164 |
player_stats = []
|
|
|
|
| 1022 |
)
|
| 1023 |
st.session_state['portfolio'] = st.session_state['portfolio'][lock_mask]
|
| 1024 |
st.session_state['portfolio'] = st.session_state['portfolio'].sort_values(by='median', ascending=False)
|
| 1025 |
+
st.session_state['export_merge'] = st.session_state['portfolio'].copy()
|
| 1026 |
with st.expander("Download options"):
|
| 1027 |
if stack_dict is not None:
|
| 1028 |
download_type = st.selectbox("Simple or Advanced Download?", options=['Simple', 'Advanced'], key='download_choice')
|
|
|
|
| 1106 |
st.download_button(label="Download Portfolio", data=st.session_state['export_file'].to_csv(index=False), file_name="portfolio.csv", mime="text/csv")
|
| 1107 |
with merge_port:
|
| 1108 |
if st.button("Add to export"):
|
| 1109 |
+
st.session_state['export_base'] = pd.concat([st.session_state['export_base'], st.session_state['export_merge']])
|
| 1110 |
else:
|
| 1111 |
st.error("No portfolio to download")
|
| 1112 |
|
| 1113 |
display_frame_source = st.selectbox("Display:", options=['Portfolio', 'Export Base'], key='display_frame_source')
|
| 1114 |
if display_frame_source == 'Portfolio':
|
| 1115 |
+
display_frame = st.session_state['portfolio']
|
| 1116 |
+
elif display_frame_source == 'Export Base':
|
| 1117 |
+
display_frame = st.session_state['export_base']
|
| 1118 |
+
total_rows = len(display_frame)
|
| 1119 |
+
rows_per_page = 500
|
| 1120 |
+
total_pages = (total_rows + rows_per_page - 1) // rows_per_page # Ceiling division
|
| 1121 |
|
| 1122 |
+
# Initialize page number in session state if not exists
|
| 1123 |
+
if 'current_page' not in st.session_state:
|
| 1124 |
+
st.session_state.current_page = 1
|
| 1125 |
|
| 1126 |
+
# Display current page range info and pagination control in a single line
|
| 1127 |
+
st.write(
|
| 1128 |
+
f"Showing rows {(st.session_state.current_page - 1) * rows_per_page + 1} "
|
| 1129 |
+
f"to {min(st.session_state.current_page * rows_per_page, total_rows)} of {total_rows}"
|
| 1130 |
+
)
|
| 1131 |
+
|
| 1132 |
+
# Add page number input
|
| 1133 |
+
st.session_state.current_page = st.number_input(
|
| 1134 |
+
f"Page (1-{total_pages})",
|
| 1135 |
+
min_value=1,
|
| 1136 |
+
max_value=total_pages,
|
| 1137 |
+
value=st.session_state.current_page
|
| 1138 |
+
)
|
| 1139 |
|
| 1140 |
+
# Calculate start and end indices for current page
|
| 1141 |
+
start_idx = (st.session_state.current_page - 1) * rows_per_page
|
| 1142 |
+
end_idx = min(start_idx + rows_per_page, total_rows)
|
| 1143 |
|
| 1144 |
+
# Get the subset of data for the current page
|
| 1145 |
+
current_page_data = display_frame.iloc[start_idx:end_idx]
|
| 1146 |
+
# Display the paginated dataframe first
|
| 1147 |
+
st.dataframe(
|
| 1148 |
+
current_page_data.style
|
| 1149 |
+
.background_gradient(axis=0)
|
| 1150 |
+
.background_gradient(cmap='RdYlGn')
|
| 1151 |
+
.background_gradient(cmap='RdYlGn_r', subset=['Finish_percentile', 'Own', 'Dupes'])
|
| 1152 |
+
.format(freq_format, precision=2),
|
| 1153 |
+
height=1000,
|
| 1154 |
+
use_container_width=True
|
| 1155 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1156 |
|
| 1157 |
# Create player summary dataframe
|
| 1158 |
player_stats = []
|