Pandas DataFrame.pivot_table()-Funktion
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 als
pivot(),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
# 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:
- Die ursprünglichen Daten liegen im Long-Format vor, wobei jede Zeile den Umsatz eines Produkts in einer bestimmten Region aufzeichnet.
pivot_table()Verwendet product als Zeilenindex, region als Spaltenindex und sales als Werte.- Verwenden Sie
aggfunc='sum'um die Umsätze zu summieren und zusammenzufassen. - 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 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
# 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önnen
margins_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 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.- Wann
valuesWenn 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.
Andere Erweiterungen
Gängige Pandas-Funktionen