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
Files changed (1) hide show
  1. app.py +39 -45
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['portfolio']])
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
- total_rows = len(st.session_state['portfolio'])
1115
- rows_per_page = 500
1116
- total_pages = (total_rows + rows_per_page - 1) // rows_per_page # Ceiling division
 
 
 
1117
 
1118
- # Initialize page number in session state if not exists
1119
- if 'current_page' not in st.session_state:
1120
- st.session_state.current_page = 1
1121
 
1122
- # Display current page range info and pagination control in a single line
1123
- st.write(
1124
- f"Showing rows {(st.session_state.current_page - 1) * rows_per_page + 1} "
1125
- f"to {min(st.session_state.current_page * rows_per_page, total_rows)} of {total_rows}"
1126
- )
1127
-
1128
- # Add page number input
1129
- st.session_state.current_page = st.number_input(
1130
- f"Page (1-{total_pages})",
1131
- min_value=1,
1132
- max_value=total_pages,
1133
- value=st.session_state.current_page
1134
- )
1135
 
1136
- # Calculate start and end indices for current page
1137
- start_idx = (st.session_state.current_page - 1) * rows_per_page
1138
- end_idx = min(start_idx + rows_per_page, total_rows)
1139
 
1140
- # Get the subset of data for the current page
1141
- current_page_data = st.session_state['portfolio'].iloc[start_idx:end_idx]
1142
- # Display the paginated dataframe first
1143
- st.dataframe(
1144
- current_page_data.style
1145
- .background_gradient(axis=0)
1146
- .background_gradient(cmap='RdYlGn')
1147
- .background_gradient(cmap='RdYlGn_r', subset=['Finish_percentile', 'Own', 'Dupes'])
1148
- .format(freq_format, precision=2),
1149
- height=1000,
1150
- use_container_width=True
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 = []