Pandas pd.crosstab() Funktion

Pandas 常用函数Pandas Häufige Funktionen


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 mitaggfuncParameter überschrieben werden.
  • Parameter: aggfunc
    • Typ: Funktion oder String.
    • Beschreibung: Aggregationsfunktion (wie 'sum', 'mean', 'count' usw.). Wenn angegebenvaluesmuss es verwendet werden.
  • Parameter: margins
    • Typ: boolean.
    • Beschreibung: WennTrue, Zeilen- und Spaltensummen hinzufügen. Standard istFalse。
  • Parameter: normalize
    • Typ: boolean oder 'all', 'index', 'columns'.
    • Beschreibung: WennTrue, 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

import pandas as pd

# 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:

  1. 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

import pandas as pd

# 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 pandas as pd
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 pandas as pd
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äßigdropna=Trueentfernt Zeilen und Spalten, die fehlende Werte enthalten, und zeigt nur gültige Daten an.
  • Verwenden Siedropna=Falseum die Häufigkeit von Kombinationen anzuzeigen, die fehlende Werte enthalten.

Tipp: 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 常用函数Pandas Häufige Funktionen

Andere Erweiterungen