Adding conditional formatting with graded color scale to aggrid

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.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.