РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
344 of 687 menu

Функция crosstab

Функция crosstab принимает одномерные массивы, серии или списки и строит по ним таблицу сопряжённости. Первым параметром обычно передаются значения для строк, вторым - для столбцов. Результатом является DataFrame с частотами комбинаций. Функция также позволяет добавлять агрегирующие функции через параметр aggfunc и заполнять пропуски через параметр fill_value.

Синтаксис

pd.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, margins_name='All', dropna=True, normalize=False)

Пример

Построим простую таблицу частот по двум категориальным признакам:

import pandas as pd df = pd.DataFrame({ 'a': ['X', 'X', 'Y', 'Y', 'X'], 'b': ['A', 'B', 'A', 'A', 'B'] }) res = pd.crosstab(df['a'], df['b']) print(res)

Результат выполнения кода:

b A B a X 1 2 Y 2 0

Пример

Добавим строку и столбец с итоговыми суммами с помощью параметра margins:

import pandas as pd df = pd.DataFrame({ 'a': ['X', 'X', 'Y', 'Y', 'X'], 'b': ['A', 'B', 'A', 'A', 'B'] }) res = pd.crosstab(df['a'], df['b'], margins=True) print(res)

Результат выполнения кода:

b A B All a X 1 2 3 Y 2 0 2 All 3 2 5

Пример

Вместо подсчёта частот выполним агрегацию значений с помощью параметра aggfunc. Для этого передадим в параметр values столбец с числами:

import pandas as pd df = pd.DataFrame({ 'a': ['X', 'X', 'Y', 'Y', 'X'], 'b': ['A', 'B', 'A', 'A', 'B'], 'c': [10, 20, 30, 40, 50] }) res = pd.crosstab(df['a'], df['b'], values=df['c'], aggfunc='sum') print(res)

Результат выполнения кода:

b A B a X 10.0 70.0 Y 70.0 NaN

Пример

Используем параметр normalize для вычисления относительных частот:

import pandas as pd df = pd.DataFrame({ 'a': ['X', 'X', 'Y', 'Y', 'X'], 'b': ['A', 'B', 'A', 'A', 'B'] }) res = pd.crosstab(df['a'], df['b'], normalize='index') print(res)

Результат выполнения кода:

b A B a X 0.333333 0.666667 Y 1.000000 0.000000

Пример

Работа с несколькими категориальными столбцами для создания многомерной таблицы:

import pandas as pd df = pd.DataFrame({ 'a': ['X', 'X', 'Y', 'Y', 'X'], 'b': ['A', 'B', 'A', 'A', 'B'], 'c': ['P', 'Q', 'P', 'Q', 'P'] }) res = pd.crosstab([df['a'], df['c']], df['b']) print(res)

Результат выполнения кода:

b A B a c X P 1 1 Q 0 1 Y P 1 0 Q 1 0

Смотрите также

  • функция pivot_table,
    которая строит сводную таблицу с агрегацией
  • функция pivot,
    которая перестраивает таблицу без агрегации
  • функция melt,
    которая выполняет обратное преобразование сводных таблиц
  • функция cut,
    которая разбивает числовые данные на интервалы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить