I run this deployed to Azure and Community Cloud.
# Statistikk
elif st.session_state.current_page == 4:
st.title("Statistikk")
if 'dataframe' in st.session_state:
bekreftet_df = st.session_state.dataframe[st.session_state.dataframe['Hendelse'] == "Bekreftet kasseekspedisjon"]
count_series = bekreftet_df.groupby('Brukernavn').size()
count_df = count_series.reset_index(name='Tot. salg')
kontanter_df = st.session_state.dataframe[st.session_state.dataframe['Hendelse'] == "Kasseskuff åpnet (Varesalg)"]
kontanter_series = kontanter_df.groupby('Brukernavn').size()
kontanter_count_df = kontanter_series.reset_index(name='Kont. ant')
retur_df = st.session_state.dataframe[st.session_state.dataframe['Hendelse'] == "Kasseskuff åpnet (Retur)"]
retur_series = retur_df.groupby('Brukernavn').size()
retur_count_df = retur_series.reset_index(name='Retur')
parkert_df = st.session_state.dataframe[st.session_state.dataframe['Hendelse'] == "Parkert kasseekspedisjon"]
parkert_series = parkert_df.groupby('Brukernavn').size()
parkert_count_df = parkert_series.reset_index(name='Parkert')
avbrutt_df = st.session_state.dataframe[st.session_state.dataframe['Hendelse'] == "Avbrutt kasseekspedisjon"]
avbrutt_df = avbrutt_df[avbrutt_df['Brukernavn'] != 'ServiceUser']
avbrutt_series = avbrutt_df.groupby('Brukernavn').size()
avbrutt_count_df = avbrutt_series.reset_index(name='Avbrutt')
# Addition for Man. rab
man_rab_df = st.session_state.dataframe[st.session_state.dataframe['Hendelse'].str.startswith("Manuell rabatt")]
man_rab_series = man_rab_df.groupby('Brukernavn').size()
man_rab_count_df = man_rab_series.reset_index(name='Man. rab')
# Addition for Skuffåpning
skuffapning_df = st.session_state.dataframe[st.session_state.dataframe['Hendelse'] == "Kasseskuff åpnet (Nullinnslag)"]
skuffapning_series = skuffapning_df.groupby('Brukernavn').size()
skuffapning_count_df = skuffapning_series.reset_index(name='Skuffåpning')
# New addition for Man. Trumf
manuell_trumf_df = st.session_state.dataframe[st.session_state.dataframe['Hendelse'].str.endswith("er scannet.")]
manuell_trumf_series = manuell_trumf_df.groupby('Brukernavn').size()
manuell_trumf_count_df = manuell_trumf_series.reset_index(name='Man. Trumf')
# Merging all dataframes including the new one
count_df = (count_df.merge(kontanter_count_df, on='Brukernavn', how='left')
.merge(retur_count_df, on='Brukernavn', how='left')
.merge(parkert_count_df, on='Brukernavn', how='left')
.merge(avbrutt_count_df, on='Brukernavn', how='left')
.merge(man_rab_count_df, on='Brukernavn', how='left')
.merge(skuffapning_count_df, on='Brukernavn', how='left')
.merge(manuell_trumf_count_df, on='Brukernavn', how='left')
.fillna(0))
count_df['Kont.%'] = ((count_df['Kont. ant'] / count_df['Tot. salg'] * 100).round(1)).astype(str) + "%"
total_sales = count_df['Tot. salg'].sum()
count_df['Salg%'] = ((count_df['Tot. salg'] / total_sales * 100).round(1)).astype(str) + "%"
# Calculate various 'Vs oms' metrics
for event_type, col_name in [('Retur', 'Retur%'), ('Parkert', 'Park.%'), ('Avbrutt', 'Avbr.%'), ('Man. rab', 'Rab.%'), ('Skuffåpning', 'Skuff.%')]:
count_df[f'{event_type} Share'] = count_df[event_type] / count_df[event_type].sum()
count_df[col_name] = (count_df[f'{event_type} Share'] - count_df['Salg%'].str.rstrip('%').astype('float') / 100) * 100
count_df[col_name] = count_df[col_name].round(1).astype(str) + "%"
# Adjust the desired_order list to include the new column
desired_order = ["Brukernavn", "Tot. salg", "Salg%", "Kont. ant", "Kont.%", "Retur", "Retur%", "Parkert", "Park.%", "Avbrutt", "Avbr.%", "Man. rab", "Rab.%", "Skuffåpning", "Skuff.%", "Man. Trumf"]
# Adjust the TOTAL row to include the total for the new column
total_row = pd.DataFrame([["TOTAL", total_sales, "100%", kontanter_count_df['Kont. ant'].sum(), "N/A", retur_count_df['Retur'].sum(), "N/A", parkert_count_df['Parkert'].sum(), "N/A", avbrutt_count_df['Avbrutt'].sum(), "N/A", man_rab_count_df['Man. rab'].sum(), "N/A", skuffapning_count_df['Skuffåpning'].sum(), "N/A", manuell_trumf_count_df['Man. Trumf'].sum()]], columns=desired_order)
count_df = pd.concat([count_df, total_row], ignore_index=True)
count_df = count_df[desired_order]
builder = GridOptionsBuilder.from_dataframe(count_df)
grid_options = builder.build()
AgGrid(count_df, fit_columns_on_grid_load=True, gridOptions=grid_options, allow_unsafe_jscode=True)
else:
st.write("Vennligst legg til en CSV-fil på Opplastingen.")
I want to add conditional formatting with graded color scale to some of the columns in the table, for example Kont.%. But anything I try from the web and chatgpt, it doesnt work.