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 = []
|