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: Как посчитать значения в столбце с условием