Pandas ist eine leistungsstarke Python-Bibliothek zur Datenmanipulation und -analyse. Das Erstellen neuer Spalten in einem DataFrame basierend auf Bedingungen ist eine gängige Aufgabe. Dieser Artikel untersucht mehrere effiziente Methoden, um dies zu erreichen, wobei sowohl Klarheit als auch Leistung im Vordergrund stehen. Wir werden Listenverständnisse, NumPy-Methoden, pandas.DataFrame.apply
und pandas.Series.map()
behandeln und deren Stärken und Schwächen vergleichen.
Inhaltsverzeichnis
- Listenverständnisse zum bedingten Erstellen von Spalten
- Nutzen von NumPy für optimierte bedingte Logik
- Verwenden von
pandas.DataFrame.apply()
für flexible bedingte Logik - Effizientes Wert-Mapping mit
pandas.Series.map()
- Leistungsvergleich und Empfehlungen
Listenverständnisse zum bedingten Erstellen von Spalten
Listenverständnisse bieten eine prägnante Syntax zum Erstellen neuer Spalten basierend auf einfachen Bedingungen. Sie sind besonders effizient für kleinere DataFrames. Ihre Leistung kann jedoch bei größeren Datensätzen nachlassen.
import pandas as pd
data = {'Sales': [100, 200, 150, 250, 300],
'Region': ['Nord', 'Süd', 'Nord', 'Ost', 'West']}
df = pd.DataFrame(data)
df['SalesCategory'] = ['Hoch' if sales > 200 else 'Niedrig' for sales in df['Sales']]
print(df)
Nutzen von NumPy für optimierte bedingte Logik
NumPy bietet hochoptimierte vektorisierte Operationen, die die Leistung, insbesondere bei größeren DataFrames, erheblich verbessern. np.where()
ist besonders nützlich für bedingte Zuweisungen.
import numpy as np
df['SalesCategory_np'] = np.where(df['Sales'] > 200, 'Hoch', 'Niedrig')
print(df)
Verwenden von pandas.DataFrame.apply()
für flexible bedingte Logik
Die Methode apply()
bietet Flexibilität für komplexere bedingte Logik und wendet Funktionen zeilenweise (axis=1
) oder spaltenweise (axis=0
) an. Sie kann jedoch bei sehr großen DataFrames, insbesondere bei rechenintensiven Funktionen, langsamer sein als NumPy.
def categorize_sales(row):
if row['Region'] == 'Nord' and row['Sales'] > 150:
return 'Hoch Nord'
elif row['Sales'] > 200:
return 'Hoch'
else:
return 'Niedrig'
df['SalesCategory_apply'] = df.apply(categorize_sales, axis=1)
print(df)
Effizientes Wert-Mapping mit pandas.Series.map()
Die Methode map()
ist ideal für das Anwenden von Mappings von einem Satz von Werten auf einen anderen, wodurch kategoriale Spalten effizient erstellt werden.
region_mapping = {'Nord': 'Nordregion', 'Süd': 'Südregion', 'Ost': 'Ostregion', 'West': 'Westregion'}
df['RegionMapped'] = df['Region'].map(region_mapping)
print(df)
Leistungsvergleich und Empfehlungen
Die optimale Methode hängt von Faktoren wie der Komplexität der Bedingung, der Größe des DataFrames und den Leistungsanforderungen ab. Bei einfachen Bedingungen und kleineren Datensätzen sind Listenverständnisse prägnant. Die vektorisierten Operationen von NumPy bieten erhebliche Leistungsvorteile bei größeren Datensätzen und komplexerer Logik. apply()
bietet Flexibilität für komplexe zeilen- oder spaltenweise Operationen, während map()
bei Wertzuordnungen exzellent ist. Ein Benchmarking mit Ihren spezifischen Daten wird empfohlen, um den effizientesten Ansatz zu bestimmen.