# Pandas DataFrame.where(): Bedingungen in DataFrames prüfen

Die Python-Pandas-`DataFrame.where()`-Funktion dient dazu, **bedingte Datenmanipulationen** in DataFrames durchzuführen. Sie ermöglicht es Programmiererinnen und Programmierern, Werte in einem [Pandas DataFrame](https://www.ionos.com/de-ch/digitalguide/websites/web-entwicklung/python-pandas-dataframe/) basierend auf einer bestimmten Bedingung zu ersetzen oder zu maskieren.

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

Die `where()`-Funktion nimmt bis zu fünf Parameter entgegen und folgt der unten gezeigten grundlegenden Syntax:

```python
DataFrame.where(cond, other=nan, inplace=False, axis=None, level=None)
```

Hierbei wird die Funktion auf einen DataFrame angewendet, und nur die Werte, die die angegebene Bedingung (`cond`) erfüllen, bleiben unverändert. Alle anderen Werte werden durch die in `other` festgelegten Werte ersetzt.

### Relevante Parameter

Pandas `DataFrame.where()` nimmt verschiedene Parameter entgegen, die eine flexible Anpassung der Datenmanipulation ermöglichen:

<table>
  <thead>
    <tr>
      <th><strong>Parameter</strong></th>
      <th><strong>Beschreibung</strong></th>
      <th><strong>Default-Wert</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`cond`</td>
      <td>Bedingung, die erfüllt sein muss, damit die Werte im DataFrame beibehalten werden</td>
      <td></td>
    </tr>
    <tr>
      <td>`other`</td>
      <td>Wert, durch den die Werte ersetzt werden, die die Bedingung nicht erfüllen</td>
      <td></td>
    </tr>
    <tr>
      <td>`inplace`</td>
      <td>Wenn `True`, wird die Operation direkt auf dem bestehenden DataFrame durchgeführt</td>
      <td>`False`</td>
    </tr>
    <tr>
      <td>`axis`</td>
      <td>Gibt an, entlang welcher Achse die Bedingung angewendet wird (`axis=0`/Zeilen oder `axis=1`/Spalten)</td>
      <td>`None`</td>
    </tr>
    <tr>
      <td>`level`</td>
      <td>Legt fest, auf welche Ebene des Multiindex die Bedingung angewendet werden soll</td>
      <td>`None`</td>
    </tr>
  </tbody>
</table>

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

Die `where()`-Funktion kann in einer Vielzahl von Situationen eingesetzt werden, in denen bedingte **Datenmanipulationen** erforderlich sind. Hierunter fällt zum Beispiel die Datenbereinigung oder das **Erstellen neuer Spalten basierend auf Bedingungen**.

### Bedingtes Ersetzen von Werten

Angenommen, Sie haben einen DataFrame mit den Verkaufsergebnissen eines Unternehmens und möchten nur die positiven Ergebnisse anzeigen. Alle negativen Ergebnisse sollen durch `0` ersetzt werden. Dies lässt sich mit Pandas `DataFrame.where()` erreichen. Zunächst wird dafür ein DataFrame erstellt:

```python
import pandas as pd
# Beispiel-DataFrame erstellen
data = {
    'Region': ['Nord', 'Süd', 'Ost', 'West'],
    'Verkäufe_Q1': [15000, -5000, 3000, -1000],
    'Verkäufe_Q2': [20000, 25000, -7000, 5000]
}
df = pd.DataFrame(data)
print(df)
```

Der obige Code liefert folgenden DataFrame:

```none
Region  Verkäufe_Q1  Verkäufe_Q2
0   Nord        15000        20000
1    Süd        -5000        25000
2    Ost         3000        -7000
3   West        -1000         5000
```

Mit einem Aufruf von `where()` können Sie nun alle negativen Werte durch `0` ersetzen. Hierzu müssen Sie allerdings sicherstellen, dass **nur die Spalten betrachtet werden, die numerische Werte enthalten**, da ansonsten der Vergleich nicht funktioniert.

```python
# Bedingtes Ersetzen von Werten
df_positive = df.copy()
df_positive[['Verkäufe_Q1', 'Verkäufe_Q2']] = df[['Verkäufe_Q1', 'Verkäufe_Q2']].where(df[['Verkäufe_Q1', 'Verkäufe_Q2']] > 0, 0)
print(df_positive)
```

Der resultierende DataFrame `df_positive` enthält nur die positiven Verkaufsergebnisse und ersetzt alle negativen Werte wie gewünscht durch `0`:

```none
Region    Verkäufe_Q1    Verkäufe_Q2
0     Nord                15000                20000
1        Süd                        0                25000
2        Ost                 3000                        0
3     West                        0                 5000
```

### Bedingtes Maskieren von Werten

Pandas `DataFrame.where()` kann auch verwendet werden, um Werte zu maskieren, d. h. nur bestimmte Teile eines DataFrames sichtbar zu machen. Im Folgenden soll der DataFrame nur die Werte anzeigen, die über einem bestimmten Schwellenwert (in diesem Falle `10000`) liegen. Auch hier müssen Sie wieder dafür Sorge tragen, dass nur numerische Spalten betrachtet werden:

```python
# Nur Werte anzeigen, die über 10000 liegen
df_masked = df.copy()
df_masked[['Verkäufe_Q1', 'Verkäufe_Q2']] = df[['Verkäufe_Q1', 'Verkäufe_Q2']].where(df[['Verkäufe_Q1', 'Verkäufe_Q2']] > 10000)
print(df_masked)
```

In diesem Fall zeigt der resultierende DataFrame `df_masked` nur die Werte an, die größer als `10000` sind. Alle anderen Werte werden als `NaN` dargestellt:

```none
Region    Verkäufe_Q1    Verkäufe_Q2
0     Nord            15000.0            20000.0
1        Süd                    NaN            25000.0
2        Ost                    NaN                    NaN
3     West                    NaN                    NaN
```


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