# Pandas groupby() erklärt

Die Python Pandas `DataFrame.groupby()`-Funktion ermöglicht es, **Daten nach bestimmten Kriterien zu gruppieren** und verschiedene Aggregationen und Transformationen auf diesen Gruppen durchzuführen.

## Syntax von Pandas `DataFrame.groupby()`

Pandas `groupby()` nimmt **bis zu vier Parameter** entgegen. Die grundlegende Syntax sieht folgendermaßen aus:

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

### Relevante Parameter

<table>
  <thead>
    <tr>
      <th><strong>Parameter</strong></th>
      <th><strong>Beschreibung</strong></th>
      <th><strong>Defaultwert</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`by`</td>
      <td>Schlüssel oder Liste von Schlüsseln, nach denen gruppiert werden soll; nicht in Kombination mit `level`</td>
      <td>`None`</td>
    </tr>
    <tr>
      <td>`level`</td>
      <td>Wird bei Multiindizes verwendet, um eine oder mehrere Ebenen zu spezifizieren, sodass die Gruppierung nach bestimmten Ebenen erfolgt</td>
      <td>`None`</td>
    </tr>
    <tr>
      <td>`as_index`</td>
      <td>Wenn `True`, werden die Gruppenschlüssel als Index des resultierenden DataFrame gesetzt</td>
      <td>`True`</td>
    </tr>
    <tr>
      <td>`group_keys`</td>
      <td>Wenn `True`, sind die Gruppenschlüssel in den Indizes der Gruppen enthalten</td>
      <td>`True`</td>
    </tr>
    <tr>
      <td>`dropna`</td>
      <td>Legt fest, ob Gruppen mit NaN-Werten ausgeschlossen werden sollen</td>
      <td>`True`</td>
    </tr>
  </tbody>
</table>

## Anwendung von Pandas `DataFrame.grouby()`

Die Pandas `groupyby()`-Funktion ist besonders nützlich, wenn man **große Datenmengen analysieren und zusammenfassen** möchte, um Muster oder Anomalien zu erkennen.

### Gruppieren und Aggregieren

Im Folgenden wird ein Datensatz von Produktverkäufen betrachtet, der Informationen über das Verkaufsdatum, das verkaufte Produkt und die verkaufte Menge enthält:

```python
import pandas as pd
# Beispiel-Datensatz mit Produktverkäufen
data = {
    'Datum': ['2021-01-01', '2021-01-01', '2021-01-02', '2021-01-02', '2021-01-03'],
    'Produkt': ['A', 'B', 'A', 'B', 'A'],
    'Menge': [10, 20, 15, 25, 10]
}
df = pd.DataFrame(data)
print(df)
```

Der resultierende DataFrame sieht folgendermaßen aus:

```none
Datum Produkt  Menge
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
```

Im nächsten Schritt soll der Datensatz nach Produkt gruppiert werden. Hierfür wird Pandas `groupby()` genutzt. Anschließend wird die Summe der verkauften Menge jedes Produktes mithilfe der `sum()`-Funktion ausgerechnet:

```none
# Gruppieren nach Produkt und Summe der verkauften Menge berechnen
summe = df.groupby('Produkt')['Menge'].sum()
print(summe)
```

Das Ergebnis zeigt, wie viele Einheiten jedes Produkts insgesamt verkauft wurden:

```none
Produkt
A    35
B    45
Name: Menge, dtype: int64
```

### Mehrfache Aggregationen

Das folgende Beispiel nutzt einen ähnlichen, aber erweiterten Datensatz an, der zusätzlich den Umsatz enthält:

```python
data = {
    'Datum': ['2021-01-01', '2021-01-01', '2021-01-02', '2021-01-02', '2021-01-03'],
    'Produkt': ['A', 'B', 'A', 'B', 'A'],
    'Menge': [10, 20, 15, 25, 10],
    'Umsatz': [100, 200, 150, 250, 100]
}
df = pd.DataFrame(data)
print(df)
```

Folgender DataFrame wird also betrachtet:

```none
Datum Produkt  Menge  Umsatz
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
```

Die Daten werden mithilfe von Pandas `DataFrame.groupby()` erneut nach Produkt gruppiert. Anschließend wird die `agg()`-Funktion genutzt, um nach der Gesamtsumme der verkauften Mengen und Umsätze sowie dem durchschnittlichen Umsatz pro Produkt zu aggregieren.

```none
# Gruppieren nach Produkt und Anwendung mehrerer Aggregationen anwenden
gruppen = df.groupby('Produkt').agg({
    'Menge': 'sum',
    'Umsatz': ['sum', 'mean']
})
print(gruppen)
```

Das Ergebnis sieht wie folgt aus:

```none
Menge Umsatz        
      sum    sum    mean
Produkt             
A      35    350  116.666667
B      45    450  225.000000
```


This is a markdown version of: [https://www.ionos.com/de-ch/digitalguide/websites/web-entwicklung/python-pandas-dataframe-groupby/](https://www.ionos.com/de-ch/digitalguide/websites/web-entwicklung/python-pandas-dataframe-groupby/) for AI/LLM consumption.