Pandas: как создать кросс-таблицу с процентами


Вы можете использовать аргумент нормализации в функции pandas crosstab() для создания кросс-таблицы, которая отображает процентные значения вместо чисел:

 p.d. crosstab (df. col1 , df. col2 , normalize=' index ')

Аргумент нормализации принимает три разных аргумента:

  • all : Показать процент относительно всех значений.
  • index : Показать процент как сумму значений строк.
  • Столбцы : отображает процентное соотношение от суммы значений столбца.

В следующих примерах показано, как использовать каждый из этих методов на практике со следующим DataFrame pandas:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C '],
                   ' position ':['G', 'G', 'F', 'G', 'F', 'F', 'F', 'G', 'G', 'F', 'F'],
                   ' points ': [22, 25, 24, 39, 34, 20, 18, 17, 20, 19, 22]})

#view DataFrame
print (df)

   team position points
0 AG 22
1 AG 25
2 AF 24
3 BG 39
4 BF 34
5 BF 20
6 BF 18
7 GC 17
8 GC 20
9 CF 19
10 CF 22

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

 #create crosstab that displays count by team and position
p.d. crosstab (df. team , df. position )

position F G
team		
AT 12
B 3 1
C 2 2

Пример 1. Создайте перекрестную таблицу с процентами относительно всех значений.

Мы можем использовать функцию crosstab() с аргументомnormalize=all , чтобы создать перекрестную таблицу, которая отображает процентное соотношение каждого значения по отношению к общему количеству всех значений:

 #create crosstab that displays counts as percentage relative to total count
p.d. crosstab (df. team , df. position , normalize=' all ')

position F G
team		
A 0.090909 0.181818
B 0.272727 0.090909
C 0.181818 0.181818

Вот как интерпретировать результат:

  • Игроки команды А на позиции F составляют 9,09% от общего числа игроков.
  • Игроки команды А на позиции G составляют 18,18% от общего числа игроков.

И так далее.

Пример 2. Создание перекрестной таблицы с процентами от итоговых значений строк

Мы можем использовать функцию crosstab() с аргументомnormalize =index , чтобы создать перекрестную таблицу, которая отображает процентное соотношение каждого значения по отношению к общему количеству строк:

 #create crosstab that displays counts as percentage relative to row totals
p.d. crosstab (df. team , df. position , normalize=' index ')

position F G
team		
A 0.333333 0.666667
B 0.750000 0.250000
C 0.500000 0.500000

Вот как интерпретировать результат:

  • Игроки на позиции F составляют 33,33% от общего числа игроков команды А.
  • Игроки на позиции F составляют 75% от общего числа игроков команды B.
  • Игроки на позиции F составляют 50% от общего числа игроков команды C.

И так далее.

Пример 3. Создание перекрестной таблицы с процентами от итоговых значений столбцов

Мы можем использовать функцию crosstab() с аргументомnormalize =columns , чтобы создать перекрестную таблицу, которая отображает проценты каждого значения относительно общего количества столбцов:

 #create crosstab that displays counts as percentage relative to column totals
p.d. crosstab (df. team , df. position , normalize=' columns ')

position F G
team		
A 0.166667 0.4
B 0.500000 0.2
C 0.333333 0.4

Вот как интерпретировать результат:

  • Игроки команды А составляют 16,67% от общего числа игроков, занимающих позицию F.
  • Игроки команды B составляют 50% от общего числа игроков, занимающих позицию F.
  • Игроки команды C составляют 33,33% от общего числа игроков с позицией F.

И так далее.

Примечание . Полную документацию по функции pandas crosstab() можно найти здесь .

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в pandas:

Pandas: как использовать GroupBy и подсчет значений
Pandas: как использовать GroupBy для подсчета ячеек
Pandas: Как посчитать значения в столбце с условием

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *