crosstab für Häufigkeitstabellen
Berechnen Sie mit pd.crosstab eine Kreuztabelle der Häufigkeiten oder Anteile zweier kategorischer Spalten.
crosstab für Häufigkeitstabellen ist eine kostenlose Pandas & NumPy Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Pandas & NumPy Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Pandas & NumPy Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist eine Kreuztabelle?
Eine Kreuztabelle (Crosstab) zählt, wie oft jede Kombination von Werten aus zwei oder mehr kategorialen Variablen in einem Datensatz vorkommt. Sie ist ein spezieller Anwendungsfall einer Pivot-Tabelle, der speziell für Zählungen entwickelt wurde. Pandas stellt mit pd.crosstab() eine kompakte Möglichkeit bereit, solche Häufigkeitstabellen zu berechnen, ohne ausdrücklich groupby() oder pivot_table() aufrufen zu müssen.
Einfacher Aufruf von crosstab()
Der minimale Aufruf pd.crosstab(index, columns) nimmt zwei arrayähnliche Eingaben (typischerweise DataFrame-Spalten) entgegen und gibt eine Häufigkeitstabelle zurück. Die Zeilen entsprechen den eindeutigen Werten des ersten Arguments, die Spalten den eindeutigen Werten des zweiten. Jede Zelle enthält die Anzahl der Zeilen, in denen beide Werte in den ursprünglichen Daten gemeinsam vorkommen.
import pandas as pd
df = pd.DataFrame({
'gender': ['M', 'F', 'M', 'F', 'M', 'F', 'M'],
'product': ['A', 'A', 'B', 'B', 'A', 'B', 'B']
})
ct = pd.crosstab(df['gender'], df['product'])
print(ct)
# product A B
# gender
# F 1 2
# M 2 2Zeilen- und Spaltennamen anpassen
Verwenden Sie die Parameter rownames und colnames, um den Zeilen- und Spaltenachsen der Ausgabe aussagekräftige Namen zu geben und die Standardnamen der Series zu überschreiben. Dies ist nützlich, wenn die ursprünglichen Spaltennamen Ihres DataFrames im Kontext der erstellten Tabelle nicht selbsterklärend sind.
ct = pd.crosstab(
df['gender'], df['product'],
rownames=['Customer Gender'],
colnames=['Purchased Product']
)
print(ct)
# Purchased Product A B
# Customer Gender
# F 1 2
# M 2 2Ränder hinzufügen (Zeilen- und Spaltensummen)
Übergeben Sie margins=True, um eine Zeilen- und eine Spaltensumme aller Werte einzuschließen. Die Bezeichnung für den Rand lautet standardmäßig 'All', kann aber mit margins_name angepasst werden. Die Randzeile zeigt die Gesamtsumme pro Spalte, die Randspalte die Gesamtsumme pro Zeile, und die Zelle unten rechts zeigt die Gesamtsumme.
ct = pd.crosstab(df['gender'], df['product'],
margins=True, margins_name='Total')
print(ct)
# product A B Total
# gender
# F 1 2 3
# M 2 2 4
# Total 3 4 7In Anteile normalisieren
Übergeben Sie den Parameter normalize, um Zählwerte in Anteile umzuwandeln. normalize=True oder normalize='all' teilt durch die Gesamtsumme. normalize='index' berechnet Zeilenanteile (jede Zeile ergibt insgesamt 1.0). normalize='columns' berechnet Spaltenanteile (jede Spalte ergibt insgesamt 1.0). Anteile sind aussagekräftiger als absolute Zählwerte, wenn sich die Gruppengrößen unterscheiden.
# Row proportions: what fraction of each gender bought each product?
print(pd.crosstab(df['gender'], df['product'], normalize='index').round(2))
# product A B
# gender
# F 0.33 0.67
# M 0.50 0.50
# All proportions: each cell as fraction of grand total
print(pd.crosstab(df['gender'], df['product'], normalize=True).round(2))Werte aggregieren statt zählen
Standardmäßig zählt crosstab Zeilen. Stattdessen können Sie eine numerische Spalte aggregieren, indem Sie die Parameter values und aggfunc übergeben — ähnlich wie bei pivot_table(). Berechnen Sie beispielsweise den Gesamtumsatz für jede Kombination aus Geschlecht und Produkt. Dadurch ist crosstab nahezu gleichwertig zu pivot_table, bietet für den Anwendungsfall von Häufigkeitstabellen jedoch eine etwas kompaktere Syntax.
df['revenue'] = [100, 80, 150, 120, 200, 90, 130]
# Sum revenue by gender and product instead of counting
ct_rev = pd.crosstab(
df['gender'], df['product'],
values=df['revenue'],
aggfunc='sum'
)
print(ct_rev)
# product A B
# gender
# F 80 210
# M 300 280Kreuztabelle mit mehreren Ebenen
Übergeben Sie eine Liste an index oder columns, um eine Kreuztabelle mit mehreren Ebenen für Zeilen oder Spalten zu erstellen. Das Ergebnis besitzt einen MultiIndex und ermöglicht eine detailliertere Aufschlüsselung. Eine Kreuztabellierung nach Geschlecht und Region in den Zeilen sowie nach Produkt in den Spalten zeigt beispielsweise jede Kombination aus Geschlecht, Region und Produkt.
df['region'] = ['East', 'West', 'East', 'West', 'East', 'East', 'West']
ct_multi = pd.crosstab(
[df['gender'], df['region']],
df['product'],
margins=True
)
print(ct_multi)
# product A B All
# gender region
# F East 0 1 1
# West 1 1 2
# M East 2 1 3
# West 0 1 1
# All 3 4 7crosstab() vs. pivot_table()
pd.crosstab() und pd.pivot_table() überschneiden sich erheblich. crosstab ist für das Zählen von Häufigkeiten optimiert und nimmt arrayähnliche Eingaben direkt entgegen (keinen DataFrame), wodurch es sich für schnelle Tabellierungen etwas kompakter verwenden lässt. pivot_table arbeitet mit einem DataFrame und unterstützt nativ beliebige Aggregationsfunktionen. Für reine Zählaufgaben ist crosstab die idiomatische Wahl; zum Aggregieren numerischer Werte sollten Sie pivot_table bevorzugen.
# crosstab (more concise for counting)
print(pd.crosstab(df['gender'], df['product']))
# Equivalent pivot_table
print(pd.pivot_table(df, index='gender', columns='product',
aggfunc='size', fill_value=0))
# Both produce the same resultVorbereitung auf den Chi-Quadrat-Test
Eine Kreuztabelle ist die standardmäßige Eingabe für einen Chi-Quadrat-Test auf Unabhängigkeit. Dieser prüft, ob zwei kategoriale Variablen statistisch miteinander verbunden sind. Die Funktion scipy.stats.chi2_contingency() akzeptiert ein Kreuztabellen-Array direkt. Dies ist eine der häufigsten Anwendungen von crosstab in der statistischen Datenanalyse: Sie berechnen die Tabelle und testen sie anschließend innerhalb desselben Ablaufs.
from scipy import stats
ct = pd.crosstab(df['gender'], df['product'])
# Convert to numpy array for scipy
chi2, p, dof, expected = stats.chi2_contingency(ct.values)
print(f'Chi2: {chi2:.2f}')
print(f'P-value: {p:.4f}')
print(f'Degrees of freedom: {dof}')
# p > 0.05 means no significant associationKreuztabelle als Heatmap visualisieren
Kreuztabellen mit vielen Kategorien sind als reine Zahlen schwer zu interpretieren. Durch die Visualisierung als Heatmap mit sns.heatmap() werden Muster sofort sichtbar — Zellen mit hoher Häufigkeit erscheinen in hellen Farben. Übergeben Sie die normalisierte Version, um Anteile statt absoluter Zählwerte darzustellen, und verwenden Sie annot=True, um die Werte in jeder Zelle anzuzeigen.
import seaborn as sns
import matplotlib.pyplot as plt
ct_norm = pd.crosstab(df['gender'], df['product'], normalize='index')
# sns.heatmap(ct_norm, annot=True, fmt='.0%', cmap='Blues')
# plt.title('Purchase Rate by Gender and Product')
# plt.tight_layout()
# plt.show()
print('Normalised crosstab ready for heatmap:')
print(ct_norm.round(2))Praxisbeispiel: Umfrageanalyse
Ein vollständiger Crosstab-Workflow: Umfragedaten laden, Häufigkeitstabellen zwischen demografischen Variablen und Antwortvariablen berechnen, anhand der Zeilen normalisieren, um Antwortquoten zu erhalten, und starke Muster identifizieren. Dies ist die Standard-Analysepipeline in der Marktforschung, beim A/B-Testing und bei der Nutzersegmentierung und lässt sich in weniger als 10 Zeilen Pandas-Code umsetzen.
# Simulate a survey dataset
survey = pd.DataFrame({
'age_group': ['18-25', '26-35', '18-25', '36-45', '26-35', '36-45'],
'satisfaction': ['High', 'Low', 'High', 'Medium', 'High', 'Low']
})
ct = pd.crosstab(survey['age_group'], survey['satisfaction'],
margins=True, margins_name='Total')
print(ct)
rates = pd.crosstab(survey['age_group'], survey['satisfaction'],
normalize='index').round(2)
print(rates)Kurzer Check
Testen Sie Ihr Verständnis von pd.crosstab zum Erstellen von Häufigkeitstabellen aus dieser Lektion.
Zusammenfassung der Lektion
In dieser Lektion haben Sie gelernt: pd.crosstab() berechnet Häufigkeiten für Kombinationen aus zwei kategorialen Variablen; normalize wandelt Häufigkeiten in Anteile für Zeilen, Spalten oder die Gesamtheit um; margins=True fügt Zeilen- und Spaltensummen hinzu; und die Ausgabe von crosstab ist direkt mit Chi-Quadrat-Tests und Heatmap-Visualisierungen kompatibel. Als Nächstes arbeiten Sie mit Zeitreihendaten und verwenden DatetimeIndex sowie Periodenbereiche.
Häufig gestellte Fragen
Ist die Lektion „crosstab für Häufigkeitstabellen“ kostenlos?
Ja — der vollständige Text von „crosstab für Häufigkeitstabellen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Pandas & NumPy Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Pandas & NumPy Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „crosstab für Häufigkeitstabellen“?
Berechnen Sie mit pd.crosstab eine Kreuztabelle der Häufigkeiten oder Anteile zweier kategorischer Spalten. Du übst Pandas & NumPy Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Pandas & NumPy Academy zu starten?
Keine Vorkenntnisse erforderlich. Pandas & NumPy Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „crosstab für Häufigkeitstabellen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Pandas & NumPy Academy-Lektion Code schreiben und ausführen?
Ja. Jede Pandas & NumPy Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- pivot_table: Kreuztabellen
- melt: Vom Breit- ins Langformat
- stack und unstack mit MultiIndex
- crosstab für Häufigkeitstabellen