This website uses cookies

Read our Privacy policy and Terms of use for more information.

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 šŸ‘‹