Pandas pd.pivot_table()-Funktion
pd.pivot_table()ist eine Funktion in der Pandas-Bibliothek, mit der manPivot-Tabellen erstellt. Eine Pivot-Tabelle ist eine gängige Funktion in Tabellenkalkulationen, mit der Daten gruppiert, aggregiert und umgeformt werden können, sodass sie sich aus verschiedenen Perspektiven leicht analysieren lassen.
undpd.crosstab()Verglichen mitpivot_table(), ist es leistungsfähiger, unterstützt mehrere Aggregationsfunktionen, den Umgang mit fehlenden Werten und komplexere Datenumformungen.
Wortdefinition: pivot_tablebedeutet „Pivot-Tabelle“, eine Tabelle, die das Datenlayout dynamisch ändern und Daten aus mehreren Dimensionen zusammenfassen und analysieren kann.
Grundlegende Syntax und Parameter
pd.pivot_table()ist eine Top-Level-Funktion der Pandas-Bibliothek, mit der Pivot-Tabellen erstellt werden.
Syntaxformat
pd.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')
Parameterbeschreibung
- Parameter:
data- Typ: DataFrame.
- Beschreibung: DataFrame mit Quelldaten.
- Parameter:
values- Typ: Spaltenname oder Liste von Spaltennamen.
- Beschreibung: Die zu aggregierende Spalte. Wenn nicht angegeben, werden alle numerischen Spalten aggregiert.
- Parameter:
index- Typ: Spaltenname, Liste von Spaltennamen oder Funktion.
- Beschreibung: Die als Zeilenindex verwendete Spalte. Kann eine einzelne Spalte oder mehrere Spalten (Liste) sein; mehrere Spalten erzeugen einen hierarchischen Index.
- Parameter:
columns- Typ: Spaltenname oder Liste von Spaltennamen.
- Beschreibung: Die als Spaltenindex verwendete Spalte.
- Parameter:
aggfunc- Typ: Funktion, Zeichenfolge oder Liste von Funktionen.
- Beschreibung: Aggregationsfunktion. Häufige Werte sind 'sum', 'mean', 'count', 'min', 'max', 'median', 'std' usw. Standardwert ist 'mean'.
- Parameter:
fill_value- Typ: Skalar oder None.
- Beschreibung: Der Wert, der zum Füllen fehlender Werte verwendet wird.
- Parameter:
margins- Typ: Boolean.
- Beschreibung: Ob Zeilen- und Spaltensummen hinzugefügt werden sollen. Standardwert ist
False。
Funktionsbeschreibung
- Rückgabewert: Gibt ein DataFrame zurück, d. h. die Pivot-Tabelle.
- Auswirkung: Formt Daten gemäß den angegebenen Zeilen, Spalten und der Aggregationsfunktion um und fasst sie zusammen.
Beispiele
Lass uns die Verwendung von gründlich meisternpd.pivot_table()anhand einer Reihe von Beispielen von einfach bis komplex.
Beispiel 1: Grundlegende Verwendung – Eine einfache Pivot-Tabelle erstellen
Beispiel
import numpy as np
# 1. Verkaufsdaten erstellen
sales = pd.DataFrame({
'date': pd.date_range('2023-01-01', periods=12, freq='D'),
'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
pivot = pd.pivot_table(sales, values='sales', index='product', columns='region', aggfunc='sum')
print("n=== pd.pivot_table() Verkaufs-Pivot-Tabelle ===")
print(pivot)
# 3. fill_value verwenden, um fehlende Werte zu füllen
print("n=== Fehlende Werte füllen (fill_value=0) ===")
pivot_fill = pd.pivot_table(sales, values='sales', index='product', columns='region', aggfunc='sum', fill_value=0)
print(pivot_fill)
Erwartete Ausgabe:
=== 销售数据 ===
date product region sales
0 2023-01-01 A North 100
1 2023-01-01 B North 150
2 2023-01-01 C North 200
3 2023-01-01 A South 180
4 2023-01-01 B South 170
5 2023-01-01 C South 160
6 2023-01-01 A East 190
7 2023-01-01 B East 200
8 2023-01-01 C East 210
9 2023-01-01 A West 220
10 2023-01-01 B West 230
11 2023-01-01 C West 240
=== pd.pivot_table() 销售透视表 ===
region East North South West
product
A 400.0 100.0 180.0 220.0
B 400.0 150.0 170.0 230.0
C 410.0 200.0 160.0 240.0
=== 填充缺失值 (fill_value=0) ===
region East North South West
product
A 400 100 180 220
B 400 150 170 230
C 410 200 160 240
Code-Erklärung:
- Die Pivot-Tabelle fasst Verkäufe nach Produkt (Zeile) und Region (Spalte) zusammen.
fill_value=0Zeigt fehlende Kombinationen als 0 an, um das Lesen zu erleichtern.
Beispiel 2: Verwendung unterschiedlicher Aggregationsfunktionen
aggfuncDer Parameter kann mehrere Aggregationsmethoden angeben, um Daten zu analysieren.
Beispiel
import numpy as np
# 1. Umfangreichere Verkaufsdaten erstellen
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. Zusammenfassen (sum)
print("n=== Summe der Verkäufe ===")
sum_result = pd.pivot_table(sales, values='sales', index='product', columns='region', aggfunc='sum')
print(sum_result)
# 3. Durchschnittliche Verkäufe berechnen
print("n=== Durchschnittliche Verkäufe ===")
mean_result = pd.pivot_table(sales, values='sales', index='product', columns='region', aggfunc='mean')
print(mean_result.round(1))
# 4. Mehrere Statistiken gleichzeitig berechnen (eine Liste übergeben)
print("n=== Anzahl und Mittelwert gleichzeitig berechnen ===")
multi_agg = pd.pivot_table(sales, values='sales', index='product', columns='region', aggfunc=['sum', 'mean'])
print(multi_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 210 200 220
B 200 150 370 230
=== 销售额平均值 ===
region East North South West
product
A 190 105.0 200 220
B 200 150.0 185 230
=== 同时计算数量和、均值 ===
sum mean
region East North South West East North South West
product
A 190 210 200 220 190 105.0 200 220
B 200 150 370 230 200 150.0 185.0 230
Code-Erklärung:
- Durch die Verwendung unterschiedlicher Aggregationsfunktionen können verschiedene statistische Kennzahlen berechnet werden.
- Wenn mehrere Aggregationsfunktionen gleichzeitig übergeben werden, erstellt die Pivot-Tabelle mehrstufige Spaltenindizes.
Beispiel 3: Verwenden von margins zum Hinzufügen von Gesamtsummen
Verwenden Sie diemarginsParameter zum Hinzufügen von Zeilen- und Spaltensummen, wodurch die Anzeige von Zusammenfassungsdaten erleichtert wird.
Beispiel
# Verwende die vorherigen Verkaufsdaten
sales = pd.DataFrame({
'product': ['A', 'B', 'A', 'B', 'A', 'B'],
'region': ['North', 'North', 'South', 'South', 'East', 'East'],
'sales': [100, 150, 200, 180, 190, 200]
})
# 1. Keine Gesamtsummen
print("=== Keine Gesamtsummen ===")
print(pd.pivot_table(sales, values='sales', index='product', columns='region', aggfunc='sum'))
# 2. Zeilen- und Spaltensummen hinzufügen
print("n=== Gesamtsummen hinzufügen (margins=True) ===")
result = pd.pivot_table(sales, values='sales', index='product', columns='region', aggfunc='sum', margins=True)
print(result)
# 3. Benutzerdefinierter Gesamtsummenname
print("n=== Benutzerdefinierter Gesamtsummenname ===")
result_name = pd.pivot_table(sales, values='sales', index='product', columns='region', aggfunc='sum', margins=True, margins_name='Total')
print(result_name)
# 4. Gesamtsummen für mehrstufigen Zeilenindex
print("n=== Multi-level row index ===")
multi_index = pd.pivot_table(sales, values='sales', index=['product', 'region'], aggfunc='sum')
print(multi_index)
Erwartete Ausgabe:
=== 无合计 ===
region East North South
product
A 190 100 200
B 200 150 180
=== 添加合计 (margins=True) ===
region East North South All
product
A 190 100 200 490
B 200 150 180 530
All 390 250 380 1020
=== 自定义合计名称 ===
region East North South 总计
product
A 190 100 200 490
B 200 150 180 530
总计 390 250 380 1020
=== 多层行索引 ===
sales
product region
A East 190
North 100
South 200
B East 200
North 150
South 180
Code-Erklärung:
margins=TrueFügt "All"-Zeilen und -Spalten hinzu und zeigt Gesamtsummendaten an.margins_nameSie können den Namen der Gesamtsumme anpassen.
Beispiel 4: Mehrstufige Indexierung und komplexe Pivotierung
Sie können mehrere Spalten verwenden, um eine Pivot-Tabelle mit mehrstufiger Indexierung zu erstellen.
Beispiel
# 1. Daten mit mehreren kategorialen Variablen erstellen
data = pd.DataFrame({
'year': [2022, 2022, 2022, 2023, 2023, 2023],
'quarter': ['Q1', 'Q2', 'Q3', 'Q1', 'Q2', 'Q3'],
'product': ['A', 'A', 'B', 'B', 'A', 'B'],
'sales': [100, 150, 200, 220, 180, 250]
})
print("=== Data ===")
print(data)
# 2. Mehrere Spalten als Zeilenindex verwenden
print("n=== Mehrjähriger Multi-Quartals-Pivot ===")
pivot = pd.pivot_table(data, values='sales', index=['year', 'quarter'], columns='product', aggfunc='sum')
print(pivot)
# 3. Mehrere Spalten als Spaltenindex verwenden
print("n=== Komplexes Kreuz-Pivotieren ===")
pivot_multi = pd.pivot_table(data, values='sales', index='year', columns=['product', 'quarter'], aggfunc='sum')
print(pivot_multi)
# 4. fill_value verwenden, um fehlende Werte zu behandeln
print("n=== Fehlende Werte auffüllen ===")
pivot_fill = pd.pivot_table(data, values='sales', index=['year', 'quarter'], columns='product', aggfunc='sum', fill_value=0)
print(pivot_fill)
Erwartete Ausgabe:
=== 数据 === year quarter product sales 0 2022 Q1 A 100 1 2022 Q2 A 150 2 2022 Q3 B 200 3 2023 Q1 B 220 4 2023 Q2 A 180 5 2023 Q3 B 250 === 多年份多季度透视 === product A B year quarter 2022 Q1 100.0 NaN 2022 Q2 150.0 NaN 2022 Q3 NaN 200.0 2023 Q1 NaN 220.0 2023 Q2 180.0 NaN 2023 Q3 NaN 250.0 === 复杂交叉透视 === product A B quarter Q1 Q2 Q3 Q1 Q2 Q3 year 2022 100 150 200 NaN NaN NaN 2023 NaN 180 250 NaN NaN NaN === 填充缺失值 === product A B year quarter 2022 Q1 100 0 2022 Q2 150 0 2022 Q3 0 200 2023 Q1 0 220 2023 Q2 180 0 2023 Q3 0 250
Code-Erklärung:
- Mehrstufige Indexierung wird durch Angabe
index=['year', 'quarter']als Liste. fill_value=0Fehlende Daten einheitlich mit 0 füllen, um spätere Berechnungen zu erleichtern.
Weitere ErweiterungenTipp:
pd.pivot_table()bietet leistungsstarke Daten-Pivot-Funktionalität. Wenn Sie nur die Häufigkeit zweier kategorialer Variablen zählen möchten,pd.crosstab()kann prägnanter sein.pd.crosstab()Gibt Häufigkeitszählungen zurück, währendpivot_table()mehrere Statistiken wie Mittelwert, Summe, Standardabweichung usw. berechnen kann.pd.crosstab()kann angesehen werden alspivot_table()Inaggfunc='count'ein Spezialfall, wenn
Pandas gängige Funktionen