Pandas DataFrame.pivot_table()-Funktion

Pandas 常用函数Gängige Pandas-Funktionen


df.pivot_table()ist eine Member-Methode von DataFrame und wird verwendet, umeine Pivot-Tabelle zu erstellen. Sie istpivot()eine erweiterte Version von, unterstützt Aggregationsoperationen und kann doppelte Kombinationen von Zeilen- und Spaltenindizes verarbeiten.

Die Pivot-Tabelle ist eines der am häufigsten verwendeten Werkzeuge in der Datenanalyse. Sie kann Daten aus verschiedenen Perspektiven gruppieren, zusammenfassen und umformen, wodurch es einfacher wird, Muster und Trends in Daten zu entdecken.

Wortdefinition: pivot_tablebedeutet "Pivot-Tabelle", eine Tabelle, die das Datenlayout dynamisch ändern kann und die automatische Aggregation doppelter Daten unterstützt.


Grundlegende Syntax und Parameter

df.pivot_table()ist eine Instanzmethode von DataFrame, die über den Punktoperator aufgerufen wird.

Syntaxformat

DataFrame.pivot_table(values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')

Parameterbeschreibung

  • Parameter: index
    • Typ: Spaltenname, Label, Liste von Labels oder None.
    • Beschreibung: Die Spalte, die als Zeilenindex verwendet wird. Sie kann eine einzelne Spalte oder mehrere Spalten (Liste) sein; mehrere Spalten erzeugen einen hierarchischen Index.
  • Parameter: columns
    • Typ: Spaltenname oder Label.
    • Beschreibung: Die Spalte, die als Spaltenindex verwendet wird und dazu dient, eindeutige Werte zu Spaltennamen zu erweitern.
  • Parameter: values
    • Typ: Spaltenname, Label, Liste von Labels oder None.
    • Beschreibung: Die numerischen Spalten, die aggregiert werden sollen. Wenn nicht angegeben, werden alle numerischen Spalten aggregiert.
  • Parameter: aggfunc
    • Typ: Funktion, String oder Liste von Funktionen.
    • Beschreibung: Aggregatfunktion. Häufige Werte sind'sum'(sum),'mean'(mean, Standardwert),'count'(count),'min'(min),'max'(max),'median'(Median),'std'(Standardabweichung), usw.
  • Parameter: fill_value
    • Typ: Skalar oder None.
    • Beschreibung: Der Wert, der zum Füllen fehlender Werte verwendet wird. Standardwert ist None, wobei NaN beibehalten wird.
  • Parameter: margins
    • Typ: boolean.
    • Beschreibung: Ob Zeilen- und Spaltensummen hinzugefügt werden sollen. Standardwert ist False. Bei True werden am Ende der Zeilen und Spalten Zusammenfassungsdaten hinzugefügt.
  • Parameter: margins_name
    • Typ: string.
    • Beschreibung: Der Name der Gesamtzeile/-spalte, standardmäßig 'All'. Nur gültig, wenn margins=True.

Funktionsbeschreibung

  • Rückgabewert: Gibt ein DataFrame zurück, d. h. die Pivot-Tabelle.
  • Merkmale: Anders alspivot(),pivot_table()löst bei doppelten Index+Spalten-Kombinationen keinen Fehler aus und verwendet automatischaggfunczur Aggregation.

Beispiele

Lass uns dies anhand einer Reihe von Beispielen von einfach bis komplex gründlich meisterndf.pivot_table()die Verwendung von.

Beispiel 1: Grundlegende Verwendung - Eine einfache Pivot-Tabelle erstellen

Beispiel

import pandas as pd

# 1. Verkaufsdaten erstellen
sales = pd.DataFrame({
    'product': ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'],
    'region': ['North', 'North', 'North', 'South', 'South', 'South', 'East', 'East', 'Ost', 'West', 'West', 'West'],
    'sales': [100, 150, 200, 180, 170, 160, 190, 200, 210, 220, 230, 240]
})

print("=== Verkaufsdaten ===")
print(sales)

# 2. Pivot-Tabelle erstellen - Umsatz nach Produkt und Region zusammenfassen (Standard-Aggregatfunktion ist Mittelwert)
pivot = sales.pivot_table(values='sales', index='product', columns='region', aggfunc='sum')
print("n=== df.pivot_table() Verkaufs-Pivot-Tabelle (Summe)===")
print(pivot)

Erwartete Ausgabe:

=== 销售数据 ===
    product  region  sales
0         A   North    100
1         B   North    150
2         C   North    200
3         A   South    180
4         B   South    170
5         C   South    160
6         A   East    190
7         B   East    200
8         C   East    210
9         A   West    220
10        B   West    230
11        C   West    240

=== df.pivot_table() 销售透视表(求和)===
region   East  North  South  West
product
A         190    100    180   220
B         200    150    170   230
C         210    200    160   240

Code-Erklärung:

  1. Die ursprünglichen Daten liegen im Long-Format vor, wobei jede Zeile den Umsatz eines Produkts in einer bestimmten Region aufzeichnet.
  2. pivot_table()Verwendet product als Zeilenindex, region als Spaltenindex und sales als Werte.
  3. Verwenden Sieaggfunc='sum'um die Umsätze zu summieren und zusammenzufassen.
  4. Das Ergebnis ist eine übersichtliche zweidimensionale Tabelle, wodurch sich die Umsatzleistung verschiedener Produkte in verschiedenen Regionen leicht vergleichen lässt.

Beispiel 2: Verwendung verschiedener Aggregatfunktionen

aggfuncDer Parameter kann mehrere Aggregationsmethoden angeben, um Daten zu analysieren.

Beispiel

import pandas as pd
import numpy as np

# 1. Reichhaltigere Verkaufsdaten erstellen (jedes Produkt hat mehrere Datensätze)
sales = pd.DataFrame({
    'product': ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'],
    'region': ['North', 'North', 'South', 'South', 'East', 'East', 'West', 'West', 'North', 'South'],
    'sales': [100, 150, 200, 180, 190, 200, 220, 230, 110, 190],
    'quantity': [10, 15, 20, 18, 19, 20, 22, 23, 11, 19]
})

print("=== Verkaufsdaten ===")
print(sales)

# 2. Durchschnittliche Verkäufe berechnen (Standard-Aggregatfunktion)
print("n=== Durchschnittliche Verkäufe ===")
mean_result = sales.pivot_table(values='sales', index='product', columns='region', aggfunc='mean')
print(mean_result.round(1))

# 3. Mehrere Aggregatfunktionen gleichzeitig verwenden (ein Dictionary übergeben)
print("n=== Mehrere Aggregatfunktionen ===")
multi_agg = sales.pivot_table(
    values='sales',
    index='product',
    columns='region',
    aggfunc={'sales': ['sum', 'mean', 'max']}
)
print(multi_agg)

# 4. Unterschiedliche Spalten verwenden unterschiedliche Aggregatfunktionen
print("n=== Unterschiedliche Spalten, unterschiedliche Aggregationen ===")
diff_agg = sales.pivot_table(
    values=['sales', 'quantity'],
    index='product',
    columns='region',
    aggfunc={'sales': 'sum', 'quantity': 'mean'}
)
print(diff_agg)

Erwartete Ausgabe:

=== 销售数据 ===
   product  region  sales quantity
0        A   North    100       10
1        B   North    150       15
2        A   South    200       20
3        B   South    180       18
4        A   East    190       19
5        B   East    200       20
6        A   West    220       22
7        B   West    230       23
8        A   North    110       11
9        B   South    190       19

=== 销售额平均值 ===
region   East  North  South  West
product
A       190.0  105.0  200.0  220.0
B       200.0  150.0  185.0  230.0

=== 多聚合函数 ===
        sales
          sum          mean  max
region  East North South West East North South West East North South West
product
A       190  210   200  220   190  105   200  220   190  110   200  220
B       200  150   370  230   200  150   185  230   200  150   190  230

=== 不同列不同聚合 ===
        sales        quantity
region   East North South West  East North South West
product
A         190  210   200  220  19.0  10.5  20.0  22.0
B         200  150   370  230  20.0  15.0  18.5  23.0

Code-Erklärung:

  • aggfuncKann eine einzelne Zeichenfolge (z. B. 'sum', 'mean') oder eine Liste oder ein Wörterbuch sein.
  • Wenn ein Wörterbuch übergeben wird, können unterschiedliche Aggregatfunktionen für unterschiedliche Spalten angegeben werden.
  • Der durchschnittliche Umsatz von Produkt A in der Region Nord beträgt 105 ((100+110)/2), was die Fähigkeit von pivot_table() demonstriert, doppelte Werte automatisch zu verarbeiten.

Beispiel 3: Verwenden von margins zum Hinzufügen von Gesamtsummen

Verwenden SiemarginsDer Parameter kann Zeilen- und Spaltensummen hinzufügen, was die Anzeige von Zusammenfassungsdaten erleichtert.

Beispiel

import pandas as pd

# 1. Verkaufsdaten erstellen
sales = pd.DataFrame({
    'product': ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'],
    'region': ['North', 'North', 'South', 'South', 'East', 'East', 'West', 'West'],
    'sales': [100, 150, 200, 180, 190, 200, 220, 230]
})

# 2. Pivot-Tabelle ohne Summen
print("=== No Totals ===")
no_margins = sales.pivot_table(values='sales', index='product', columns='region', aggfunc='sum')
print(no_margins)

# 3. Zeilen- und Spaltensummen hinzufügen
print("n=== Summen hinzufügen (margins=True) ===")
with_margins = sales.pivot_table(
    values='sales',
    index='product',
    columns='region',
    aggfunc='sum',
    margins=True
)
print(with_margins)

# 4. Benutzerdefinierter Summenname
print("n=== Benutzerdefinierter Summenname ===")
custom_name = sales.pivot_table(
    values='sales',
    index='product',
    columns='region',
    aggfunc='sum',
    margins=True,
    margins_name='Total'
)
print(custom_name)

# 5. Pivot-Tabelle mit mehrstufigem Zeilenindex
print("n=== Mehrstufiger Zeilenindex ===")
multi_index = sales.pivot_table(
    values='sales',
    index=['product', 'region'],
    aggfunc='sum'
)
print(multi_index)

Erwartete Ausgabe:

=== 无合计 ===
region   East  North  South  West
product
A         190    100    200   220
B         200    150    180   230

=== 添加合计 (margins=True) ===
region   East  North  South  West   All
product
A         190    100    200   220   710
B         200    150    180   230   760
All       390    250    380   450  1470

=== 自定义合计名称 ===
region   East North South West   总计
product
A       190  100   200  220    710
B       200  150   180  230    760
总计     390  250   380  450   1470

Code-Erklärung:

  • margins=TrueFügt eine "All"-Zeile (Gesamt) unten und eine "All"-Spalte (Gesamt) rechts neben der Pivot-Tabelle hinzu.
  • Sie könnenmargins_nameder Parameter zum Anpassen des Namens der Gesamtsummen, wie z. B. 'Total'.
  • Die All-Spalte zeigt die Gesamtumsätze jedes Produkts über alle Regionen, die All-Zeile zeigt die Gesamtumsätze aller Produkte in jeder Region, und in der unteren rechten Ecke steht die Gesamtsumme aller Daten.

Beispiel 4: Verwendung von fill_value zum Umgang mit fehlenden Werten

Verwenden Siefill_valueder Parameter kann fehlende Werte ausfüllen, die nach dem Pivotieren entstehen.

Beispiel

import pandas as pd
import numpy as np

# 1. Daten erstellen (einige Produkt-Region-Kombinationen existieren nicht)
sales = pd.DataFrame({
    'product': ['A', 'B', 'A', 'B'],
    'region': ['North', 'North', 'South', 'South'],
    'sales': [100, 150, 200, 180]
})

print("=== Originaldaten ===")
print(sales)

# 2. Fehlende Werte nicht füllen (Standard)
print("n=== Fehlende Werte nicht gefüllt ===")
no_fill = sales.pivot_table(values='sales', index='product', columns='region')
print(no_fill)

# 3. Fehlende Werte mit 0 füllen
print("n=== Fehlende Werte mit 0 füllen ===")
fill_zero = sales.pivot_table(
    values='sales',
    index='product',
    columns='region',
    fill_value=0
)
print(fill_zero)

# 4. Automatische Aggregation doppelter Werte demonstrieren
data_with_duplicates = pd.DataFrame({
    'product': ['A', 'A', 'B', 'B', 'A'],
    'region': ['North', 'North', 'South', 'Süd', 'Nord'],
    'sales': [100, 120, 200, 180, 90]
})

print("n=== Daten mit doppelten Werten ===")
print(data_with_duplicates)

print("n=== Automatische Aggregation (pivot löst einen Fehler aus, pivot_table summiert automatisch) ===")
auto_agg = data_with_duplicates.pivot_table(
    values='sales',
    index='product',
    columns='region',
    aggfunc='sum'
)
print(auto_agg)

Erwartete Ausgabe:

=== 原始数据 ===
  product  region  sales
0       A   North    100
1       B   North    150
2       A   South    200
3       B   South    180

=== 不填充缺失值 ===
region   North  South
product
A         100.0  200.0
B         150.0  180.0

=== 填充缺失值为0 ===
region  North  South
product
A         100   200
B         150   180

=== 重复值数据 ===
  product  region  sales
0       A   North    100
1       A   North    120
2       B   South    200
3       B   South    180
4       A   North    90

=== 自动聚合(pivot会报错,pivot_table自动求和)===
region   North  South
product
A         310     NaN
B         NaN    380

Code-Erklärung:

  • fill_value=0Fehlende Werte können mit 0 gefüllt werden, um nachfolgende Berechnungen zu erleichtern.
  • Wenn doppelte Produkt-Region-Kombinationen vorliegen,pivot_table()verwendet automatischaggfuncfür die Aggregation, währendpivot()löst einen Fehler aus.
  • Der Gesamtumsatz von Produkt A in der Region Nord beträgt 310 (100+120+90), was das Ergebnis der automatischen Summierung ist.

Hinweise

Wichtige Hinweise:

  • pivot_table()undpivot()Der Hauptunterschied liegt in der Behandlung doppelter Werte: pivot_table aggregiert automatisch, während pivot einen Fehler auslöst.
  • WannvaluesWenn der Parameter nicht angegeben wird, werden alle numerischen Spalten aggregiert.
  • marginsDie vom Parameter hinzugefügten Gesamtzeilen/-spalten können die nachfolgende Datenverarbeitung beeinflussen; mit Vorsicht verwenden.
  • Bei der Verarbeitung großer Datenmengen kann pivot_table viel Speicher verbrauchen; achten Sie auf die Kontrolle des Datenvolumens.

Pandas 常用函数Gängige Pandas-Funktionen

Andere Erweiterungen