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 pd

Adesso 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()
      )
df3

Rispetto 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 👋