Data Analysis

Effizientes Erstellen von DataFrame-Spalten basierend auf Bedingungen in Pandas

Spread the love

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

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.

Schreibe einen Kommentar

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