Data Analysis

Effizientes Auswählen von Zeilenindizes basierend auf Spaltenbedingungen in Pandas

Spread the love

Pandas ist eine leistungsstarke Python-Bibliothek zur Datenmanipulation und -analyse. Eine häufige Aufgabe besteht darin, Zeilen aus einem DataFrame basierend auf Bedingungen auszuwählen, die auf bestimmte Spalten angewendet werden. Dieser Artikel untersucht drei effiziente Methoden zum Abrufen der Indizes von Zeilen, die ein bestimmtes Kriterium erfüllen.

Inhaltsverzeichnis

Boolesche Indizierung: Ein einfacher und effizienter Ansatz

Die boolesche Indizierung bietet eine prägnante und effiziente Lösung für einfache Auswahlkriterien. Sie nutzt direkt den Wahrheitswert einer Bedingung, um Zeilen zu filtern.

Dies wird anhand eines Beispiels veranschaulicht:


import pandas as pd

data = {'col1': [1, 2, 3, 4, 5],
        'col2': [6, 7, 8, 9, 10],
        'col3': ['A', 'B', 'C', 'D', 'E']}
df = pd.DataFrame(data)
print(df)

# Indizes erhalten, wo 'col1' größer als 2 ist
indices = df[df['col1'] > 2].index.tolist()
print(indices)  # Ausgabe: [2, 3, 4]

Dieser Code erstellt zuerst eine boolesche Maske (df['col1'] > 2), verwendet sie dann zum Filtern des DataFrames und extrahiert schließlich die Indizes der ausgewählten Zeilen mit .index.tolist().

Nutzen von NumPys np.where() für Flexibilität

Die NumPy-Funktion np.where() bietet einen vielseitigeren Ansatz, der besonders bei komplexen Bedingungen oder mehreren gleichzeitigen Bedingungen von Vorteil ist.


import numpy as np

indices = np.where(df['col1'] > 2)[0].tolist()
print(indices)  # Ausgabe: [2, 3, 4]

np.where(df['col1'] > 2) gibt ein Tupel zurück; das erste Element enthält ein Array von Indizes, die die Bedingung erfüllen. Wir greifen mit [0] auf dieses Element zu und konvertieren es mit .tolist() in eine Liste.

Verwenden von Pandas‘ query() für lesbare komplexe Abfragen

Die query()-Methode verbessert die Lesbarkeit, insbesondere bei komplexen Bedingungen. Sie erlaubt die Angabe von Kriterien mithilfe von String-Ausdrücken.


indices = df.query('col1 > 2').index.tolist()
print(indices)  # Ausgabe: [2, 3, 4]

#Beispiel mit mehreren Bedingungen
indices = df.query('col1 > 2 and col2 < 9').index.tolist()
print(indices)  # Ausgabe: [2]

Die query()-Methode akzeptiert direkt eine String-Darstellung der Bedingung, wodurch die Lesbarkeit, insbesondere bei mehreren oder komplexen Bedingungen, deutlich verbessert wird.

Fazit: Jede Methode ruft effektiv Indizes basierend auf einer Bedingung ab. Die boolesche Indizierung eignet sich am besten für einfache Bedingungen; np.where() behandelt komplexere Szenarien; und query() zeichnet sich durch Lesbarkeit bei erweiterter Filterung aus.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert