Pandas pd.crosstab() Funktion
pd.crosstab()wird in der Pandas-Bibliothek verwendet, umKreuztabellierung zu berechnenFunktion. Sie kann die Häufigkeit oder aggregierte Statistiken von zwei oder mehr Variablen berechnen und eine Tabelle ähnlich einer Excel-Pivot-Tabelle erzeugen.
Kreuztabellierung ist ein sehr nützliches Werkzeug in der statistischen Analyse und wird häufig verwendet, um die Beziehung zwischen zwei oder mehr kategorialen Variablen zu analysieren, z. B. beim Zählen der Anzahl männlicher und weiblicher Mitarbeiter in verschiedenen Abteilungen.
Wortbedeutung: crosstabist die Abkürzung für "Kreuztabellierung", eine statistische Tabelle, die die gemeinsame Verteilung von zwei oder mehr Variablen darstellt.
Grundlegende Syntax und Parameter
pd.crosstab()ist eine Top-Level-Funktion der Pandas-Bibliothek, die zur Berechnung von Kreuztabellierungen verwendet wird.
Syntaxformat
pd.crosstab(index, columns, values=None, aggfunc=None, margins=False, margins_name='All', dropna=True, normalize=False)
Parameterbeschreibung
- Parameter:
index- Typ: array-like, Series oder Liste.
- Beschreibung: Daten, die als Zeilenindex verwendet werden. Kann eine einzelne Spalte oder mehrere Spalten (Liste) sein.
- Parameter:
columns- Typ: array-like, Series oder Liste.
- Beschreibung: Daten, die als Spaltenindex verwendet werden. Kann eine einzelne Spalte oder mehrere Spalten (Liste) sein.
- Parameter:
values- Typ: array-like oder None.
- Beschreibung: Werte, die aggregiert werden sollen. Wenn angegeben, muss es zusammen mit
aggfuncParameter überschrieben werden.
- Parameter:
aggfunc- Typ: Funktion oder String.
- Beschreibung: Aggregationsfunktion (wie 'sum', 'mean', 'count' usw.). Wenn angegeben
valuesmuss es verwendet werden.
- Parameter:
margins- Typ: boolean.
- Beschreibung: Wenn
True, Zeilen- und Spaltensummen hinzufügen. Standard istFalse。
- Parameter:
normalize- Typ: boolean oder 'all', 'index', 'columns'.
- Beschreibung: Wenn
True, Werte durch die Gesamtsumme teilen, um Anteile (0-1) zu erzeugen. Sie können auch 'index' oder 'columns' angeben, um nach Zeile oder Spalte zu normalisieren.
Funktionsbeschreibung
- Rückgabewert: Gibt ein DataFrame zurück, das die Kreuzbeziehung zwischen zwei oder mehr Variablen darstellt.
- Wirkung: Erzeugt eine Tabelle, in der Zeilen und Spalten verschiedene kategoriale Variablen darstellen und Zellen die entsprechende Häufigkeit oder den aggregierten Wert anzeigen.
Beispiele
Lass uns dies anhand einer Reihe von Beispielen von einfach bis komplex gründlich meisternpd.crosstab()Verwendung von.
Beispiel 1: Grundlegende Verwendung - Kreuztabelle zweier kategorialer Variablen
Beispiele
# 1. Mitarbeiterdaten erstellen
employees = pd.DataFrame({
'department': ['Vertrieb', 'Vertrieb', 'Vertrieb', 'Ingenieurwesen', 'Ingenieurwesen', 'Personal', 'Personal', 'Vertrieb', 'Ingenieurwesen', 'Personal'],
'gender': ['Männlich', 'Weiblich', 'Weiblich', 'Männlich', 'Männlich', 'Weiblich', 'Männlich', 'Weiblich', 'Weiblich', 'Männlich']
})
print("=== Mitarbeiterdaten ===")
print(employees)
# 2. Kreuztabelle von Abteilung und Geschlecht (Häufigkeit) berechnen
result = pd.crosstab(employees['department'], employees['gender'])
print("n=== pd.crosstab() Kreuztabellierung von Abteilung und Geschlecht ===")
print(result)
Erwartete Ausgabe:
=== 员工数据 === department gender 0 Sales Male 1 Sales Female 2 Sales Female 3 Engineering Male 4 Engineering Male 5 HR Female 6 HR Male 7 Sales Female 8 Engineering Female 9 HR Male === pd.crosstab() 部门与性别交叉表 === gender Female Male department Engineering 1 2 HR 1 2 Sales 3 1
Code-Erklärung:
- Die resultierende Tabelle zeigt die Anzahl männlicher und weiblicher Mitarbeiter in jeder Abteilung.
Beispiel 2: Hinzufügen von Zeilen-/Spaltensummen und Normalisierung
Verwenden SiemarginsParameter zum Hinzufügen von Summen,normalizeParameter zum Anzeigen der Anteilsverteilung.
Beispiele
# Verwende die obigen Mitarbeiterdaten
employees = pd.DataFrame({
'department': ['Vertrieb', 'Vertrieb', 'Vertrieb', 'Ingenieurwesen', 'Ingenieurwesen', 'Personal', 'Personal', 'Vertrieb', 'Ingenieurwesen', 'Personal'],
'gender': ['Männlich', 'Weiblich', 'Weiblich', 'Männlich', 'Männlich', 'Weiblich', 'Männlich', 'Weiblich', 'Weiblich', 'Männlich']
})
# 1. Zeilen- und Spaltensummen hinzufügen
result_margins = pd.crosstab(employees['department'], employees['gender'], margins=True)
print("=== Summen hinzufügen (margins=True) ===")
print(result_margins)
# 2. Normalisierung - in Proportionen umwandeln
print("n=== Gesamtnormierung (normalize=True) ===")
result_norm = pd.crosstab(employees['department'], employees['gender'], normalize=True)
print(result_norm.round(3))
# 3. Nach Zeile normalisieren (jede Zeile summiert sich zu 1)
print("n=== Normalisierung nach Zeile (normalize='index') ===")
result_norm_index = pd.crosstab(employees['department'], employees['gender'], normalize='index')
print(result_norm_index.round(3))
# 4. Nach Spalte normalisieren (jede Spalte summiert sich zu 1)
print("n=== Normalisierung nach Spalte (normalize='columns') ===")
result_norm_col = pd.crosstab(employees['department'], employees['gender'], normalize='columns')
print(result_norm_col.round(3))
Erwartete Ausgabe:
=== 添加合计 (margins=True) === gender Female Male All department Engineering 1 2 3 HR 1 2 3 Sales 3 1 4 All 5 5 10 === 整体归一化 (normalize=True) === gender Female Male department Engineering 0.1 0.2 HR 0.1 0.2 Sales 0.3 0.1 === 按行归一化 (normalize='index') === gender Female Male department Engineering 0.333 0.667 HR 0.333 0.667 Sales 0.75 0.25 === 按列归一化 (normalize='columns') === gender Female Male department Engineering 0.2 0.4 HR 0.2 0.4 Sales 0.6 0.2
Code-Erklärung:
- Normalisierung erleichtert die Analyse proportionaler Beziehungen und das Verständnis der relativen Verteilung von Geschlecht innerhalb jeder Abteilung.
- Die zeilenweise Normalisierung zeigt die prozentuale Verteilung von Geschlecht innerhalb jeder Abteilung.
- Die spaltenweise Normalisierung zeigt den Verteilungsanteil jedes Geschlechts über die Abteilungen hinweg.
Beispiel 3: Mehrere Variablen und Aggregationsfunktionen
Sie können mehrere Zeilen-/Spaltenvariablen verwenden und Aggregationsfunktionen nutzen, um statistische Werte zu berechnen.
Beispiele
import numpy as np
# 1. Verkaufsdaten erstellen
sales = pd.DataFrame({
'region': ['North', 'North', 'South', 'South', 'East', 'East', 'West', 'West', 'North', 'South'],
'product': ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'B', 'A'],
'quarter': ['Q1', 'Q1', 'Q1', 'Q1', 'Q2', 'Q2', 'Q2', 'Q2', 'Q2', 'Q2'],
'sales': [100, 150, 200, 180, 120, 160, 190, 170, 140, 210]
})
print("=== Verkaufsdaten ===")
print(sales)
# 2. Mehrere Zeilenvariablen verwenden
print("n=== Kreuztabellierung von Region und Produkt (Häufigkeit) ===")
result_multi = pd.crosstab([sales['region'], sales['product']], sales['quarter'])
print(result_multi)
# 3. Verwenden Sie values und aggfunc, um den Verkaufsbetrag zu berechnen
print("n=== Gesamtumsatz nach Region und Quartal ===")
result_sum = pd.crosstab(sales['region'], sales['quarter'], values=sales['sales'], aggfunc='sum')
print(result_sum)
# 4. Durchschnittlichen Verkaufsbetrag berechnen
print("n=== Durchschnittlicher Umsatz nach Region und Quartal ===")
result_mean = pd.crosstab(sales['region'], sales['quarter'], values=sales['sales'], aggfunc='mean')
print(result_mean.round(1))
Erwartete Ausgabe:
=== 销售数据 ===
region product quarter sales
0 North A Q1 100
1 North B Q1 150
2 South A Q1 200
3 South B Q1 180
4 East A Q2 120
5 East B Q2 160
6 West A Q2 190
7 West B Q2 170
8 North B Q2 140
9 South A Q2 210
=== 区域和产品的交叉表(频次)===
quarter Q1 Q2
region product
East A 0 1
B 0 1
North A 1 0
B 1 1
South A 1 1
B 1 0
West A 0 1
B 0 1
=== 区域和季度的销售额合计 ===
quarter Q1 Q2
region
East NaN 280
North 250 140
South 380 210
West NaN 360
=== 区域和季度的平均销售额 ===
quarter Q1 Q2
region
East NaN 140.0
North 125.0 140.0
South 190.0 210.0
West NaN 180.0
Code-Erklärung:
- Die Verwendung mehrerer Zeilenvariablen (in Listenform) kann eine Kreuztabelle mit mehrstufiger Indexierung erstellen.
- Jede Zelle zeigt die Anzahl der Vorkommen einer bestimmten Region-Produkt-Kombination in einem bestimmten Quartal.
- Mit den Parametern values und aggfunc können Sie Aggregationen tatsächlicher numerischer Werte berechnen (Summe, Durchschnitt usw.).
Beispiel 4: Umgang mit fehlenden Werten
dropnaDer Parameter steuert, ob fehlende Kategorien einbezogen werden.
Beispiele
import numpy as np
# 1. Daten mit fehlenden Werten
data = pd.DataFrame({
'A': ['a', 'a', 'b', np.nan, 'a', 'b'],
'B': ['x', 'y', 'x', 'x', np.nan, 'y']
})
print("=== Daten mit fehlenden Werten ===")
print(data)
# 2. Standardmäßig Kombinationen mit fehlenden Werten entfernen
result_drop = pd.crosstab(data['A'], data['B'])
print("n=== Standardmäßiges Entfernen fehlender Werte (dropna=True) ===")
print(result_drop)
# 3. Fehlende Kategorien einbeziehen
result_keep = pd.crosstab(data['A'], data['B'], dropna=False)
print("n=== Fehlende Kategorien einschließen (dropna=False) ===")
print(result_keep)
Erwartete Ausgabe:
=== 包含缺失值的数据 ===
A B
0 a x
1 a y
2 b x
3 NaN x
4 a NaN
5 b y
=== 默认移除缺失值 (dropna=True) ===
B x y
A
a 1 1
b 1 1
=== 包含缺失值 (dropna=False) ===
B x y NaN
A
a 1 1 1
b 1 1 0
NaN 1 0 0
Code-Erklärung:
- Standardmäßig
dropna=Trueentfernt Zeilen und Spalten, die fehlende Werte enthalten, und zeigt nur gültige Daten an. - Verwenden Sie
dropna=Falseum die Häufigkeit von Kombinationen anzuzeigen, die fehlende Werte enthalten.
Andere ErweiterungenTipp:
pd.crosstab()geeignet für die Analyse von Beziehungen zwischen kategorialen Variablen. Wenn Sie eine komplexere Datenzusammenfassung benötigen (z. B. die Berechnung mehrerer Aggregationsindikatoren), verwenden Sie bittepd.pivot_table()Funktion.
Pandas Häufige Funktionen