0Pricing
Pandas & NumPy Academy · Lektion

Das Split-Apply-Combine-Muster

Verstehen Sie den konzeptionellen Ablauf von groupby: Aufteilen des DataFrame in Gruppen, Anwenden einer Funktion und Zusammenführen der Ergebnisse.

Das Split-Apply-Combine-Muster ist eine kostenlose Pandas & NumPy Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Pandas & NumPy Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Pandas & NumPy Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist GroupBy?

Die GroupBy-Operation gehört zu den leistungsfähigsten Mustern in der Datenanalyse. Sie ermöglicht es Ihnen, einen DataFrame in Gruppen aufzuteilen, auf jede Gruppe unabhängig eine Funktion anzuwenden und die Ergebnisse anschließend zu einer neuen Struktur zusammenzuführen. Dieser Ablauf wird als split-apply-combine-Muster bezeichnet – ein Begriff, den der Statistiker Hadley Wickham geprägt hat.

Der Split-Schritt

Im split-Schritt teilt Pandas den DataFrame anhand der eindeutigen Werte in einer oder mehreren Spalten in Teil-DataFrames auf. Enthält Ihre Daten beispielsweise eine Spalte region mit Werten wie 'North', 'South' und 'West', erstellt der Split-Schritt drei separate Gruppen. Dabei werden noch keine Daten verschoben oder kopiert – Pandas merkt sich lediglich, welche Zeilen zu welcher Gruppe gehören.

import pandas as pd

df = pd.DataFrame({
    'region': ['North', 'South', 'North', 'West', 'South'],
    'sales': [200, 150, 300, 180, 220]
})

# split: create a GroupBy object
grouped = df.groupby('region')
print(type(grouped))  # DataFrameGroupBy

Der Apply-Schritt

Im apply-Schritt wird auf jede Gruppe unabhängig eine Funktion angewendet. Dabei kann es sich um eine integrierte Aggregation wie sum() oder mean() oder um eine von Ihnen definierte benutzerdefinierte Funktion handeln. Die Zeilen jeder Gruppe werden an die Funktion übergeben, die als Ergebnis einen Skalar, eine Series oder einen DataFrame zurückgibt.

# apply: compute the sum of 'sales' within each region group
total_sales = grouped['sales'].sum()
print(total_sales)
# region
# North    500
# South    370
# West     180
# Name: sales, dtype: int64

Der Combine-Schritt

Im combine-Schritt fügt Pandas die Ergebnisse der einzelnen Gruppen automatisch wieder zu einem einzigen Objekt zusammen – normalerweise zu einer Series oder einem DataFrame. Die Gruppenschlüssel werden zum Index des Ergebnisses. Dieser Schritt erfolgt automatisch, wenn Sie eine Aggregationsmethode auf einem GroupBy-Objekt aufrufen, und liefert eine übersichtliche Zusammenfassung mit einer Zeile pro Gruppe.

# combine happens automatically — result is a Series indexed by 'region'
print(total_sales.index)   # Index(['North', 'South', 'West'])
print(total_sales.values)  # [500, 370, 180]

Ein GroupBy-Objekt erstellen

Sie erstellen ein GroupBy-Objekt, indem Sie df.groupby(column) aufrufen. Zu diesem Zeitpunkt wird noch nichts berechnet – es handelt sich um ein verzögert ausgewertetes Objekt. Sie können darüber iterieren, um die Gruppen anzuzeigen, oder eine Aggregationsmethode verketten, um die Berechnung auszulösen. Mit as_index=False bleibt die Gruppierungsspalte im Ergebnis eine normale Spalte und wird nicht zum Index.

grouped = df.groupby('region', as_index=False)
result = grouped['sales'].sum()
print(result)
#   region  sales
# 0  North    500
# 1  South    370
# 2   West    180

Über Gruppen iterieren

Sie können über ein GroupBy-Objekt iterieren, um jede Gruppe einzeln zu untersuchen. Jede Iteration liefert ein Tupel aus (group_key, sub_dataframe). Das ist beim Debugging nützlich oder wenn Sie jede Gruppe mit beliebigem Python-Code verarbeiten möchten. Für die Performance in Produktionsumgebungen sollten Sie jedoch vektorisierte Aggregationsmethoden einer expliziten Iteration vorziehen.

for name, group in df.groupby('region'):
    print(f'--- {name} ---')
    print(group)
# --- North ---
#   region  sales
# 0  North    200
# 2  North    300
# --- South ---
#   region  sales
# 1  South    150
# 4  South    220

Häufig verwendete Aggregationsfunktionen

Pandas GroupBy unterstützt viele integrierte Aggregationsfunktionen: sum(), mean(), count(), min(), max(), std(), median() und weitere. Diese Funktionen sind stark optimiert und werden in einem einzigen Durchlauf auf alle Gruppen angewendet. Verwenden Sie sie immer bevorzugt gegenüber einer eigenen Python-Funktion, sofern eine integrierte Funktion vorhanden ist.

print(df.groupby('region')['sales'].mean())
# region
# North    250.0
# South    185.0
# West     180.0

print(df.groupby('region')['sales'].count())
# region
# North    2
# South    2
# West     1

Mehrere Spalten gleichzeitig gruppieren

Sie können Aggregationen gleichzeitig auf mehrere Spalten anwenden, indem Sie diese vor dem Aufruf der Aggregationsmethode auswählen, oder die Spaltenauswahl weglassen, um alle numerischen Spalten zu aggregieren. Das Ergebnis ist ein DataFrame statt einer Series mit einer Spalte pro aggregierter Variable.

df2 = pd.DataFrame({
    'region': ['North', 'South', 'North', 'South'],
    'units': [10, 8, 12, 9],
    'revenue': [200, 160, 240, 180]
})

print(df2.groupby('region').sum())
#         units  revenue
# region
# North      22      440
# South      17      340

Das mentale Modell von GroupBy

Stellen Sie sich GroupBy wie die SQL-Klausel GROUP BY vor. Der Pandas-Code df.groupby('region')['sales'].sum() entspricht in SQL SELECT region, SUM(sales) FROM df GROUP BY region. Wenn Sie diese Parallele verstehen, können Sie leichter zwischen den beiden Werkzeugen wechseln und die passende Abstraktion für Ihre Pipeline auswählen.

# Pandas GroupBy is equivalent to SQL GROUP BY
# SQL:    SELECT region, SUM(sales) FROM df GROUP BY region
# Pandas: df.groupby('region')['sales'].sum()

result = df.groupby('region')['sales'].sum().reset_index()
result.columns = ['region', 'total_sales']
print(result)

Warum nicht einfach eine Schleife verwenden?

Sie fragen sich vielleicht, warum Sie nicht einfach über eindeutige Werte iterieren und die Statistiken manuell berechnen sollten. Die Antwort lautet: Performance und Lesbarkeit. Eine Python-Schleife über Gruppen ist deutlich langsamer als ein einziger vektorisierter GroupBy-Aufruf, insbesondere bei großen Datensätzen. GroupBy-Operationen werden intern in kompiliertem C-Code ausgeführt und sind dadurch 10- bis 100-mal schneller als entsprechende Python-Schleifen.

# Slow approach with a loop
results = {}
for region in df['region'].unique():
    subset = df[df['region'] == region]
    results[region] = subset['sales'].sum()

# Fast approach with GroupBy
results_fast = df.groupby('region')['sales'].sum().to_dict()
# Both give the same answer, but GroupBy is orders of magnitude faster

GroupBy mit mehreren Gruppierungsschlüsseln

Wenn Sie eine feinere Aufteilung benötigen, gruppieren Sie nach mehreren Spalten, indem Sie eine Liste an groupby() übergeben. Das Ergebnis besitzt einen MultiIndex, dessen Ebenen jeweils einer Gruppierungsspalte entsprechen. Gruppieren Sie beispielsweise nach 'region' und 'quarter', erhalten Sie Summen für jede Kombination aus Region und Quartal.

df3 = pd.DataFrame({
    'region': ['North', 'North', 'South', 'South'],
    'quarter': ['Q1', 'Q2', 'Q1', 'Q2'],
    'sales': [200, 300, 150, 220]
})

print(df3.groupby(['region', 'quarter'])['sales'].sum())
# region  quarter
# North   Q1         200
#         Q2         300
# South   Q1         150
#         Q2         220

Kurze Überprüfung

Testen Sie Ihr Verständnis des in dieser Lektion behandelten split-apply-combine-Musters.

Zusammenfassung der Lektion

In dieser Lektion haben Sie gelernt: das split-apply-combine-Muster, auf dem alle GroupBy-Operationen beruhen, wie Sie mit df.groupby() ein GroupBy-Objekt erstellen und wie Sie integrierte Aggregationen wie sum() und mean() anwenden, um ein Ergebnis pro Gruppe zu erhalten. Als Nächstes sehen Sie sich das Gruppieren nach einzelnen und mehreren Schlüsseln mit weiteren Aggregationsmethoden an.

Häufig gestellte Fragen

Ist die Lektion „Das Split-Apply-Combine-Muster“ kostenlos?

Ja — der vollständige Text von „Das Split-Apply-Combine-Muster“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Pandas & NumPy Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Pandas & NumPy Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Das Split-Apply-Combine-Muster“?

Verstehen Sie den konzeptionellen Ablauf von groupby: Aufteilen des DataFrame in Gruppen, Anwenden einer Funktion und Zusammenführen der Ergebnisse. Du übst Pandas & NumPy Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Pandas & NumPy Academy zu starten?

Keine Vorkenntnisse erforderlich. Pandas & NumPy Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Das Split-Apply-Combine-Muster“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Pandas & NumPy Academy-Lektion Code schreiben und ausführen?

Ja. Jede Pandas & NumPy Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Das Split-Apply-Combine-Muster
  2. GroupBy mit einem und mehreren Schlüsseln
  3. Die Methode agg()
  4. GroupBy-Transformation und -Filterung
← Zurück zu Pandas & NumPy Academy