in una Pivot table é possibile inserire i subtotali usando una determinata procedura
Dataframe
procedura
- creare Piviot Table senza il Grand Total
senza margins=True
pivot = df.pivot_table(
index=["Prodotto","Città"],
values=["Fatturato","Utile"],
aggfunc='sum').reset_index()
- crea un Dataframe solo dei subtotali usando groupby
si usa la sintassi per creare Dataframe
subtotals = (
pivot.groupby("Prodotto", as_index=False)
.agg({"Fatturato": "sum","Utile": "sum"})
.assign(**{"Città": "Subtotal"}) colonna aggiuntiva necessaria per quando si unisce con la Pivot table
)
attento al nome della colonna aggiuntiva deve esesere uguale a quello presente già nella Tabella Pivot (attento agli spazi)
- unisce i 2 dataframe + ordina
si unisce i 2 dataframe pivot + subtotals e poi si ordina
unisce
pivot_with_subtotals = pd.concat([pivot, subtotals], ignore_index=True)
ordina
serve per mettere i subtotali in mezzo
pivot_with_subtotals = pivot_with_subtotals.sort_values(by=["Prodotto","Città"])
- crea nuovo Dataframe con calcolo del Grand Total
grand_total = pd.DataFrame({
"Prodotto": ["Grand Total"],
"Città": [""],
"Fatturato": [pivot["Fatturato"].sum()], somma del Fatturato
"Utile": [pivot["Utile"].sum()] somma dell Utile
})
- unisce il dataframe con il Grand Total
pivot_with_totals = pd.concat([pivot_with_subtotals, grand_total], ignore_index=True)