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.