Pandas & NumPy Academy · Lektion

pivot_table: Kreuztabellen

Erstellen Sie mit pd.pivot_table Pivot-Tabellen im Excel-Stil und legen Sie index, columns, values und aggfunc fest.

Lektion 1 von 413 Schritte

pivot_table: Kreuztabellen 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 eine Pivot-Tabelle?

Eine Pivot-Tabelle ist eine Kreuztabelle, die Daten anhand zweier kategorialer Dimensionen zusammenfasst — eine bildet die Zeilen, die andere die Spalten — und in jeder Zelle einen aggregierten Wert enthält. Wenn Sie schon einmal eine Pivot-Tabelle in Excel erstellt haben, wird Ihnen das Konzept sofort vertraut sein. Pandas stellt pd.pivot_table() (sowie die entsprechende DataFrame-Methode) bereit, um solche Zusammenfassungen vollständig in Python zu erstellen.

Einfacher Aufruf von pivot_table

Die vier wichtigsten Parameter von pd.pivot_table() sind: values (die zu aggregierende Spalte), index (die Spalte, die zu den Zeilen wird), columns (die Spalte, die zu den Spalten wird) und aggfunc (die Aggregationsfunktion, standardmäßig 'mean'). Das Ergebnis ist ein DataFrame, in dem jede Zelle den aggregierten Wert für die entsprechende Zeilen-Spalten-Kombination enthält.

import pandas as pd

df = pd.DataFrame({
    'region':  ['East', 'West', 'East', 'West', 'East', 'West'],
    'product': ['A',    'A',    'B',    'B',    'A',    'B'],
    'revenue': [200,    340,    150,    290,    310,    410]
})

table = pd.pivot_table(df,
                       values='revenue',
                       index='region',
                       columns='product',
                       aggfunc='sum')
print(table)
# product    A    B
# region
# East     510  150
# West     340  700

Die passende aggfunc auswählen

Der Parameter aggfunc akzeptiert jeden als Zeichenkette angegebenen Namen einer NumPy-/Pandas-Aggregationsfunktion, ein aufrufbares Objekt oder eine Liste aufrufbarer Objekte. Häufige Optionen sind: 'sum' für Summen, 'mean' für Mittelwerte, 'count' für Häufigkeiten sowie 'min'/'max' für Extremwerte. Wenn Sie eine Liste übergeben, erhält jede Aggregation eine eigene Ebene im Spalten-MultiIndex.

# Using mean (default)
table_mean = pd.pivot_table(df, values='revenue',
                            index='region', columns='product',
                            aggfunc='mean')
print(table_mean.round(1))
# product      A      B
# region
# East     255.0  150.0
# West     340.0  350.0

# Using count
table_count = pd.pivot_table(df, values='revenue',
                             index='region', columns='product',
                             aggfunc='count')
print(table_count)

Fehlende Zellen mit fill_value behandeln

Wenn für eine Kombination aus Zeilen- und Spaltenbezeichnungen keine Daten vorhanden sind, enthält die Zelle standardmäßig NaN. Übergeben Sie fill_value, um diese fehlenden Zellen durch einen sinnvollen Standardwert zu ersetzen, etwa 0 für Anzahlen oder Umsätze. Dadurch wird die Tabelle übersichtlicher und verhindert, dass nachfolgende arithmetische Operationen unbemerkt Ergebnisse mit NaN erzeugen.

df2 = pd.DataFrame({
    'region':  ['East', 'West', 'East'],
    'product': ['A',    'A',    'B'],
    'revenue': [200,    340,    150]
})

# West-B combination has no data -> NaN by default
table = pd.pivot_table(df2, values='revenue', index='region',
                       columns='product', aggfunc='sum', fill_value=0)
print(table)
# product    A    B
# region
# East     200  150
# West     340    0  <- filled with 0 instead of NaN

Zwischensummen mit margins hinzufügen

Übergeben Sie margins=True, um der Pivot-Tabelle Zeilen- und Spaltensummen hinzuzufügen. Pandas hängt unten eine Zeile 'All' und rechts eine Spalte 'All' an. Beide enthalten die aggregierten Werte über alle Kategorien hinweg. Mit margins_name können Sie die Bezeichnung der Summen ändern. Das entspricht der Zeile „Gesamtsumme“ in Excel-Pivot-Tabellen.

table = pd.pivot_table(df, values='revenue', index='region',
                       columns='product', aggfunc='sum',
                       fill_value=0, margins=True, margins_name='Total')
print(table)
# product    A     B  Total
# region
# East     510   150    660
# West     340   700   1040
# Total    850   850   1700

Mehrere Werte in pivot_table

Der Parameter values kann eine Liste von Spaltennamen enthalten, um mehrere Kennzahlen gleichzeitig zu aggregieren. Das Ergebnis besitzt einen Spalten-MultiIndex, dessen äußere Ebene die Wertespalte und dessen innere Ebene die Kategorie bildet. So können Sie mit einem einzigen Aufruf eine umfassende Übersichtstabelle erstellen, anstatt mehrere separate Pivot-Tabellen aufzubauen und zusammenzuführen.

df['units'] = [10, 15, 8, 12, 14, 18]

table = pd.pivot_table(df,
                       values=['revenue', 'units'],
                       index='region',
                       columns='product',
                       aggfunc='sum')
print(table)
# Columns: (revenue, A), (revenue, B), (units, A), (units, B)
print(table.columns.tolist())

Hierarchische Indizes und Spalten

Wenn Sie eine Liste an index oder columns übergeben, besitzt die Pivot-Tabelle auf der entsprechenden Achse einen MultiIndex. Dadurch können Sie detailliertere Zusammenfassungen erstellen — beispielsweise den Umsatz in den Zeilen nach Region und Quartal sowie in den Spalten nach Produkt aufschlüsseln. Auf untergeordnete Ebenen greifen Sie wie gewohnt mit .loc und Index-Tupeln zu.

df['quarter'] = ['Q1', 'Q1', 'Q2', 'Q2', 'Q1', 'Q2']

table = pd.pivot_table(df, values='revenue',
                       index=['region', 'quarter'],
                       columns='product',
                       aggfunc='sum', fill_value=0)
print(table)
# product         A    B
# region quarter
# East   Q1     510    0
#        Q2       0  150
# West   Q1     340    0
#        Q2       0  700

Das Ergebnis abflachen

Nach dem Erstellen einer Pivot-Tabelle ist der Index die Gruppierungsspalte, und der Spalten-MultiIndex (bei Verwendung mehrerer Werte) kann unhandlich sein. Ein häufig verwendetes Bereinigungsmuster besteht darin, reset_index() aufzurufen, um den Zeilenindex abzuflachen, und anschließend den Spalten-MultiIndex durch Verbinden seiner Ebenen mit einem Unterstrich mithilfe eines List Comprehensions auf eine einzelne Ebene zu reduzieren.

table = pd.pivot_table(df, values=['revenue', 'units'],
                       index='region', columns='product', aggfunc='sum')

# Flatten MultiIndex columns
table.columns = ['_'.join(str(c) for c in col) for col in table.columns]
table = table.reset_index()
print(table.columns.tolist())
# ['region', 'revenue_A', 'revenue_B', 'units_A', 'units_B']

pivot_table vs. groupby().agg()

Sowohl pivot_table als auch groupby().agg() erzeugen zusammengefasste Statistiken. Der Unterschied liegt in der Form der Ausgabe: groupby().agg() gibt einen DataFrame im Long-Format mit einer Zeile pro Gruppenkombination zurück, während pivot_table eine Tabelle im Wide-Format zurückgibt, in der eine Dimension zu Spalten wird. Für Dashboards und Berichte ist das Wide-Format von Pivot-Tabellen oft übersichtlicher; für weiterführendes Machine Learning oder statistische Analysen wird das Long-Format bevorzugt.

# Long format (groupby)
long = df.groupby(['region', 'product'])['revenue'].sum().reset_index()
print(long)
# region product  revenue
# East        A      510
# East        B      150

# Wide format (pivot_table)
wide = pd.pivot_table(df, 'revenue', 'region', 'product', 'sum', fill_value=0)
print(wide)
# product    A    B
# region
# East     510  150

Pivot-Tabelle sortieren und formatieren

Eine Pivot-Tabelle ist ein gewöhnlicher DataFrame. Sie können sie daher sortieren, abgeleitete Spalten berechnen und genau wie jeden anderen Pandas-DataFrame formatieren. Sortieren Sie beispielsweise absteigend nach einer bestimmten Produktspalte, um Regionen nach ihrer Leistung für dieses Produkt zu ordnen, oder fügen Sie eine Prozentspalte hinzu, indem Sie jede Zelle durch die Zeilensumme teilen.

table = pd.pivot_table(df, 'revenue', 'region', 'product', 'sum', fill_value=0)

# Sort by product A revenue descending
table_sorted = table.sort_values('A', ascending=False)
print(table_sorted)

# Add percentage of row total
table['A_pct'] = (table['A'] / table.sum(axis=1) * 100).round(1)
print(table)

Praktische Anwendung: Tabelle für ein Vertriebs-Dashboard

Pivot-Tabellen sind ein zentrales Werkzeug zum Erstellen von Managementberichten und Dashboards. Ein typischer Arbeitsablauf sieht so aus: Rohdaten zu Transaktionen laden, eine Pivot-Tabelle mit Monaten als Spalten und Produktkategorien als Zeilen erstellen, Summen hinzufügen und anschließend nach Excel exportieren. Der gesamte Ablauf von den Rohdaten bis zur präsentationsreifen Tabelle erfordert nur wenige Pandas-Aufrufe.

# Simulated monthly product revenue pivot
result = pd.pivot_table(
    df,
    values='revenue',
    index='product',
    columns='region',
    aggfunc='sum',
    fill_value=0,
    margins=True,
    margins_name='Grand Total'
)
print(result)
# Export to Excel
# result.to_excel('sales_pivot.xlsx')

Schnelltest

Testen Sie Ihr Verständnis von pd.pivot_table aus dieser Lektion.

Zusammenfassung der Lektion

In dieser Lektion haben Sie gelernt: pd.pivot_table() erstellt Kreuztabellen-Zusammenfassungen mit einer Dimension als Zeilen und einer anderen als Spalten; fill_value behandelt fehlende Zellen und margins=True fügt Summen hinzu; Sie können mehrere Werte gleichzeitig aggregieren; und Pivot-Tabellen erzeugen eine Ausgabe im Wide-Format, die sich ideal für Berichte eignet. Als Nächstes sehen wir uns die umgekehrte Operation an: Mit melt() wandeln Sie breite Daten zurück in das Long-Format um.

Kostenlos starten

Lerne Python mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
30
Lektionen
120

Häufig gestellte Fragen

Ist die Lektion „pivot_table: Kreuztabellen“ kostenlos?

Ja — der vollständige Text von „pivot_table: Kreuztabellen“ 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 „pivot_table: Kreuztabellen“?

Erstellen Sie mit pd.pivot_table Pivot-Tabellen im Excel-Stil und legen Sie index, columns, values und aggfunc fest. 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 „pivot_table: Kreuztabellen“?

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. pivot_table: Kreuztabellen
  2. melt: Vom Breit- ins Langformat
  3. stack und unstack mit MultiIndex
  4. crosstab für Häufigkeitstabellen
← Zurück zu Pandas & NumPy Academy