pandas.crosstab()
Функция crosstab() строит таблицу частот или агрегированных значений на пересечении двух (или более) категориальных переменных. По умолчанию считает количество появлений.
Сигнатура
pandas.crosstab(index, columns, values=None, rownames=None,
colnames=None, aggfunc=None, margins=False,
margins_name="All", dropna=True, normalize=False)
Параметры
index— переменная(ые) для строк.columns— переменная(ые) для столбцов.values— значения для агрегации (требуетaggfunc).aggfunc— функция агрегации.margins— добавить итоговую строку/столбец.normalize— нормализовать ("all","index","columns").
Возвращаемое значение
DataFrame-таблица сопряжённости.
Примеры
Пример 1. Простой подсчёт
import pandas as pd
a = pd.Series(["A", "A", "B", "B", "A"])
b = pd.Series(["x", "y", "x", "y", "x"])
print(pd.crosstab(a, b))
col_0 x y
row_0
A 2 1
B 1 1
Пример 2. Распределение ошибок по датчикам
import pandas as pd
df = pd.DataFrame({
"sensor": ["A", "A", "B", "B", "A", "B"],
"status": ["ok", "err", "ok", "ok", "ok", "err"],
})
print(pd.crosstab(df["sensor"], df["status"]))
status err ok
sensor
A 1 2
B 1 2
Пример 3. Агрегация значений
import pandas as pd
df = pd.DataFrame({
"sensor": ["A", "A", "B", "B"],
"day": ["Mon", "Tue", "Mon", "Tue"],
"temp": [22, 23, 24, 25],
})
print(pd.crosstab(df["sensor"], df["day"], values=df["temp"], aggfunc="mean"))
day Mon Tue
sensor
A 22.0 23.0
B 24.0 25.0
Пример 4. С margins (итоги)
import pandas as pd
a = pd.Series(["X", "X", "Y", "Y", "X"])
b = pd.Series(["1", "2", "1", "1", "2"])
print(pd.crosstab(a, b, margins=True))
col_0 1 2 All
row_0
X 1 2 3
Y 2 0 2
All 3 2 5
Пример 5. Нормализация
import pandas as pd
a = pd.Series(["A", "A", "B", "B"])
b = pd.Series(["x", "y", "x", "x"])
print(pd.crosstab(a, b, normalize="index"))
col_0 x y
row_0
A 0.5 0.5
B 1.0 0.0
См. также
Примечание
Лицензия и источники
Техническое описание функции адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Примеры и пояснения — © AlashEd Wiki.