# La funzione groupby() in Pandas

La funzione `DataFrame.groupby()` in [Pandas per Python](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/pandas-di-python/) permette di **raggruppare i dati in base a determinati criteri** e di effettuare diverse aggregazioni e trasformazioni su questi gruppi.

## La sintassi di `DataFrame.groupby()` in Pandas

La funzione groupby()` di Pandas accetta **fino a quattro parametri**. La sintassi di base si presenta così:

```python
DataFrame.groupby(by=None, level=None, as_index=True, sort=True, group_keys=True, dropna=True)
```

### Parametri applicabili

<table>
  <thead>
    <tr>
      <th><strong>Parametro</strong></th>
      <th><strong>Descrizione</strong></th>
      <th><strong>Valore predefinito</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`by`</td>
      <td>Chiave o [lista](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/liste-in-python/) di chiavi su cui basare il raggruppamento; non in combinazione con `level`</td>
      <td>`None`</td>
    </tr>
    <tr>
      <td>`level`</td>
      <td>Utilizzato con multi-indici per specificare uno o più livelli per effettuare il raggruppamento per livelli specifici</td>
      <td>`None`</td>
    </tr>
    <tr>
      <td>`as_index`</td>
      <td>Se `True`, le chiavi del gruppo vengono impostate come indice del DataFrame risultante</td>
      <td>`True`</td>
    </tr>
    <tr>
      <td>`group_keys`</td>
      <td>Se `True`, le chiavi del gruppo sono contenute negli indici dei gruppi</td>
      <td>`True`</td>
    </tr>
    <tr>
      <td>`dropna`</td>
      <td>Stabilisce se escludere i gruppi con valori NaN</td>
      <td>`True`</td>
    </tr>
  </tbody>
</table>

## Applicazione di `DataFrame.groupby()` in Pandas

La funzione `groupby()` di Pandas è particolarmente utile per **analizzare e riassumere grandi quantità di dati** al fine di individuare modelli o anomalie.

### Raggruppamento e aggregazione

Nelle parti seguenti utilizziamo un record di dati contenente le vendite di prodotti con informazioni sulla data di vendita, sul prodotto e sulla quantità venduti:

```python
import pandas as pd
# Record di dati di esempio con vendite di prodotti
data = {
    'Data': ['2021-01-01', '2021-01-01', '2021-01-02', '2021-01-02', '2021-01-03'],
    'Prodotto': ['A', 'B', 'A', 'B', 'A'],
    'Quantità': [10, 20, 15, 25, 10]
}
df = pd.DataFrame(data)
print(df)
```

Il DataFrame risultante si presenta così:

```none
Data  Prodotto  Quantità
0  2021-01-01       A     10
1  2021-01-01       B     20
2  2021-01-02       A     15
3  2021-01-02       B     25
4  2021-01-03       A     10
```

Nella fase successiva passiamo a raggruppare il record di dati per prodotto. A tal fine utilizziamo la funzione `groupby()` di Pandas. Il totale della quantità venduta per ciascun prodotto viene quindi calcolato utilizzando la funzione `sum()`:

```none
# Raggruppamento per prodotto e calcolo del totale della quantità venduta
totale = df.groupby('Prodotto')['Quantità'].sum()
print(totale)
```

Il risultato mostra quante unità di ciascun prodotto sono state vendute in totale:

```none
Prodotto
A    35
B    45
Nome: quantità, dtype: int64
```

### Aggregazioni multiple

L’esempio seguente utilizza un record di dati simile, ma ampliato, che contiene anche il fatturato:

```python
data = {
    'Data': ['2021-01-01', '2021-01-01', '2021-01-02', '2021-01-02', '2021-01-03'],
    'Prodotto': ['A', 'B', 'A', 'B', 'A'],
    'Quantità': [10, 20, 15, 25, 10],
    'Fatturato': [100, 200, 150, 250, 100]
}
df = pd.DataFrame(data)
print(df)
```

Viene quindi preso in considerazione il seguente DataFrame:

```none
Data  Prodotto  Quantità Fatturato
0  2021-01-01       A     10     100
1  2021-01-01       B     20     200
2  2021-01-02       A     15     150
3  2021-01-02       B     25     250
4  2021-01-03       A     10     100
```

I dati vengono nuovamente raggruppati per prodotto utilizzando `DataFrame.groupby()` in Pandas. Successivamente si utilizza la funzione `agg()` per eseguire aggregazioni in base alle quantità totali vendute e ai fatturati, nonché al fatturato medio per prodotto.

```none
# Raggruppamento per prodotto e applicazione di più aggregazioni
gruppi = df.groupby('Prodotto').agg({
    'Quantità': 'sum',
    'Fatturato': ['sum', 'mean']
})
print(gruppi)
```

Il risultato si presenta così:

```none
Quantità Fatturato        
      sum    sum    mean
Prodotto             
A      35    350  116.666667
B      45    450  225.000000
```


This is a markdown version of: [https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/dataframe-groupby-in-pandas-per-python/](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/dataframe-groupby-in-pandas-per-python/) for AI/LLM consumption.