Il metodo groupby() permette di aggregare i nostri dati secondo uno o più criteri.
In questa micro-lezione vedremo come usarlo.
Il programma della micro-lezione
La libreria e il dataframe
Per prima cosa, importiamo pandas:
import pandas as pdAdesso creiamo un dataframe:
df = pd.DataFrame({
"nome": ["Anna", "Marco", "Giulia", "Anna", "Marco"],
"città": ["Roma", "Milano", "Napoli", "Roma", "Milano"],
"vendite": [100, 150, 200, 120, 180],
})Il dataframe avrà questo aspetto:
nome | città | vendite |
|---|---|---|
Anna | Roma | 100 |
Marco | Milano | 150 |
Giulia | Napoli | 200 |
Anna | Roma | 120 |
Marco | Milano | 180 |
Come funziona groupby()
Ipotizziamo di voler sommare i valori delle vendite, per città. In questo caso faremo così:
df2 = (df.
groupby("città", as_index=False)["vendite"]
.sum()
)Il nuovo dataframe, qui chiamato df2, avrà questo aspetto:
città | vendite |
|---|---|
Milano | 330 |
Napoli | 200 |
Roma | 220 |
In breve abbiamo:
Indicato che vogliamo raggruppare i dati secondo la colonna
cittàReimpostato l’indice del dataframe. Infatti, raggruppare secondo una colonna fa sì che questa diventi un indice del dataframe, a meno che non specifichiamo di non volerlo.
Scelto il tipo di aggregazione: in questo caso la somma.
Raggruppare secondo i valori di più colonne
Immaginiamo di voler sommare i valori delle vendite sia per città che per nome. Ecco come fare:
df3 = (df.
groupby(["città","nome"], as_index=False)["vendite"]
.sum()
)
df3Rispetto a quello che abbiamo fatto in precedenza, abbiamo semplicemente aggiunto la colonna nome.
Ed ecco qui il nostro dataframe raggruppato:
città | nome | vendite |
|---|---|---|
Milano | Marco | 330 |
Napoli | Giulia | 200 |
Roma | Anna | 220 |
Usare più tipi di aggregazioni
Adesso immaginiamo di voler raggruppare i valori delle vendite per città come nel primo esempio.
Tuttavia, non vogliamo limitarci alla somma delle vendite, ma vogliamo sapere quante ne abbiamo per ogni città e il loro valore medio.
Per poter usare più aggregazioni contemporaneamente possiamo usare la funzione .agg() e, per il nostro esempio, specificare sum (la somma), mean (la media) e count (il conteggio).
Ecco qui il codice:
df4 = (df
.groupby('città', as_index=False)['vendite']
.agg(['sum', 'mean', 'count'])
)Ed ecco il risultato:
città | sum | mean | count |
|---|---|---|---|
Milano | 330 | 165.0 | 2 |
Napoli | 200 | 200.0 | 1 |
Roma | 220 | 110.0 | 2 |
Alla prossima micro-lezione 👋