Ottieni l'aggregato di Pandas Group-By e Sum
-
Somma cumulativa con
groupby -
pivot()per riorganizzare i dati in una bella tabella -
Applica la
funzioneagroupbyin Pandas -
agg()per ottenere la somma aggregata della colonna
Dimostreremo come ottenere l’aggregato in Pandas usando groupby e sum. Esamineremo anche la funzionalità pivot per disporre i dati in una bella tabella e definire la nostra funzione personalizzata ed eseguirla sul DataFrame. Otterremo anche la somma aggregata usando agg().
Somma cumulativa con groupby
Possiamo ottenere la somma cumulativa utilizzando il metodo groupby. Considera il seguente Dataframe con le colonne Date, Fruit e Sale:
import pandas as pd
df = pd.DataFrame(
{
"Date": ["08/09/2018", "10/09/2018", "08/09/2018", "10/09/2018"],
"Fruit": [
"Apple",
"Apple",
"Banana",
"Banana",
],
"Sale": [34, 12, 22, 27],
}
)
Se vogliamo calcolare la somma cumulativa di Sale per Fruit e per ogni data, possiamo fare:
import pandas as pd
df = pd.DataFrame(
{
"Date": ["08/09/2018", "10/09/2018", "08/09/2018", "10/09/2018"],
"Fruit": [
"Apple",
"Apple",
"Banana",
"Banana",
],
"Sale": [34, 12, 22, 27],
}
)
print(df.groupby(by=["Fruit", "Date"]).sum().groupby(level=[0]).cumsum())
Produzione:
Fruit Date Sale
Apple 08/09/2018 34
10/09/2018 46
Banana 08/09/2018 22
10/09/2018 49
pivot() per riorganizzare i dati in una bella tabella
Il metodo pivot() potrebbe impostare l’attributo di riga e colonna della tabella. Cambiamo il codice sopra e applichiamo il metodo pivot() per riorganizzare i dati in una bella tabella:
import pandas as pd
df = pd.DataFrame(
{
"Date": ["08/09/2018", "10/09/2018", "08/09/2018", "10/09/2018"],
"Fruit": [
"Apple",
"Apple",
"Banana",
"Banana",
],
"Sale": [34, 12, 22, 27],
}
)
print(
df.groupby(["Fruit", "Date"], as_index=False).sum().pivot("Fruit", "Date").fillna(0)
)
Produzione:
Sale
Date 08/09/2018 10/09/2018
Fruit
Apple 34 12
Banana 22 27
Applica la funzione a groupby in Pandas
Creeremo un metodo semplice per ottenere il conteggio dei valori in series o 1d array e utilizzeremo groupby per ottenere il conteggio aggregato di ciascun valore:
from pandas import *
d = {"series": Series(["1", "2", "1", "1", "4", "4", "5"])}
df = DataFrame(d)
def get_count(values):
return len(values)
grouped_count = df.groupby("series").series.agg(get_count)
print(grouped_count)
Dopo aver eseguito il codice, otterremo il seguente output, che fornisce l’occorrenza di ogni valore nella serie.
Produzione:
series
1 3
2 1
4 2
5 1
Name: series, dtype: int64
agg() per ottenere la somma aggregata della colonna
Possiamo usare agg() per applicare l’operazione di somma sulla colonna. Codici di esempio:
import pandas as pd
df = pd.DataFrame(
{
"Date": ["08/09/2018", "10/09/2018", "08/09/2018", "10/09/2018"],
"Fruit": [
"Apple",
"Apple",
"Banana",
"Banana",
],
"Sale": [34, 12, 22, 27],
}
)
print(df.groupby(["Fruit"])["Sale"].agg("sum"))
Produzione:
Fruit
Apple 46
Banana 49
Name: Sale, dtype: int64