Pandas предоставляет множество методов для работы с наборами данных в Python. Одним из них является метод crosstab() в Python, который используется для расчета частоты совпадений двух или более факторов и перекрестных таблиц.
- Синтаксис
- Как вычислить проценты
- Для общего количества строк
- Для общего количества столбцов
- Для всех значений
- Заключение
Синтаксис
Вот синтаксис функции pd.crosstab() в Python:
pd.crosstab(index, columns, values=None, aggfunc=None, rownames=None, colnames=None, margins=False, margins_name='All', dropna=True, normalize=False)
Параметры | Описание |
---|---|
index | Значения для группировки в строках. |
columns | Значения для группировки в столбцах. |
values | (Необязательно) Совокупные значения. Если не указано, будут подсчитаны вхождения. |
aggfunc | (Необязательно) Функция агрегирования применяется к значениям. По умолчанию установлено значение «Нет» (вхождения подсчитывается). |
rownames and colnames | (Необязательно) Имена, которые нужно присвоить результирующим строкам и столбцам. |
margins | (Необязательно) Добавлять ли поля строк/столбцов (итого). |
margins_name | (Необязательно) Имя поля(если включено). |
dropna | (Необязательно) Исключить ли пропущенные значения. По умолчанию установлено значение «True». |
normalize | (Необязательно) Следует ли нормализовать путем деления всех значений на сумму значений. По умолчанию установлено значение False. |
Как вычислить проценты
Чтобы вычислить проценты с помощью кросс-таблицы Pandas в Python, мы можем использовать параметр нормализации в pd.crosstab.
Установив для него значение True, Pandas автоматически вычисляет для нас проценты. Мы можем указать требования, например, проценты по строкам, столбцам или всей таблице.
Вот базовый пример:
import pandas as pd Company = { 'Department': ['Engineering', 'Engineering', 'Engineering', 'Engineering', 'Marketing', 'Marketing', 'Marketing', 'Marketing', 'Sales', 'Sales', 'Sales', 'Sales'], 'Performance': ['Excellent', 'Good', 'Fair', 'Poor', 'Excellent', 'Good', 'Fair', 'Poor', 'Excellent', 'Good', 'Fair', 'Poor'] } df = pd.DataFrame(Company) percentage_crosstab = pd.crosstab(df['Department'], df['Performance'], normalize='index') * 100 print(percentage_crosstab)
Вывод: нормализация дает среднее значение. Итак, для расчета процентов нам нужно результат умножить на 100.
Performance Excellent Fair Good Poor Department Engineering 25.0 25.0 25.0 25.0 Marketing 25.0 25.0 25.0 25.0 Sales 25.0 25.0 25.0 25.0
После реализации кода в редакторе Pycharm снимок экрана указан ниже.
Для общего количества строк
Нормализация индекса в контексте pd.crosstab означает нормализацию значений по строкам (индексу). Этот тип нормализации вычисляет процент каждого значения по отношению к сумме соответствующей строки.
Вот пример:
import pandas as pd Sales_data = { 'Salesperson': ['Alice', 'Bob', 'Alice', 'Bob', 'Alice', 'Bob'], 'Region': ['North', 'North', 'South', 'South', 'East', 'East'], 'Products Sold': [10, 20, 15, 25, 30, 40] } df = pd.DataFrame(Sales_data) normalized_index_crosstab = pd.crosstab(df['Salesperson'], df['Region'], normalize='index') * 100 print(normalized_index_crosstab)
Выходные данные: в этом примере результирующая перекрестная таблица с нормализацией индекса будет отображать процент продуктов, проданных каждым продавцом в каждом регионе, по отношению к общему количеству проданных продуктов.
Region East North South Salesperson Alice 33.333333 33.333333 33.333333 Bob 33.333333 33.333333 33.333333
Ниже приведен скриншот после реализации кода в редакторе Pycharm.
Для общего количества столбцов
Нормализация столбцов в Python Pandas включает в себя нормализацию значений по столбцам. Он вычисляет процент каждого значения по отношению к сумме соответствующего столбца.
Давайте посмотрим пример:
import pandas as pd Sales_data = { 'Salesperson': ['Alice', 'Bob', 'Alice', 'Bob', 'Alice', 'Bob'], 'Region': ['North', 'North', 'South', 'South', 'East', 'East'], 'Products Sold': [10, 20, 15, 25, 30, 40] } df = pd.DataFrame(Sales_data) normalized_column_crosstab = pd.crosstab(df['Salesperson'], df['Region'], normalize='columns') * 100 print(normalized_column_crosstab)
Вывод: здесь результирующая кросс-таблица Pandas на Python с нормализацией столбцов будет отображать процент продуктов, проданных в каждом регионе, по отношению к общему количеству продуктов, проданных в этом регионе.
Region East North South Salesperson Alice 50.0 50.0 50.0 Bob 50.0 50.0 50.0
После выполнения кода в Pycharm результат можно увидеть на снимке экрана ниже.
Для всех значений
Процент каждого значения по отношению к общему количеству всех значений вычисляется в перекрестной таблице Python Pandas.
import pandas as pd Sales_data = { 'Salesperson': ['Alice', 'Bob', 'Alice', 'Bob', 'Alice', 'Bob'], 'Region': ['North', 'North', 'South', 'South', 'East', 'East'], 'Products Sold': [10, 20, 15, 25, 30, 40] } df = pd.DataFrame(Sales_data) total_normalized_crosstab = pd.crosstab(df['Salesperson'], df['Region'], normalize='all') * 100 print(total_normalized_crosstab)
Выходные данные: в результате будет создана перекрестная таблица Pandas, где каждое значение представляет собой процент продуктов, проданных в каждом регионе каждым продавцом, по отношению к общему количеству проданных продуктов в целом.
Region East North South Salesperson Alice 16.666667 16.666667 16.666667 Bob 16.666667 16.666667 16.666667
Ниже приведен снимок экрана, показывающий результат после реализации кода редактора Pycharm.
Заключение
В этой статье я подробно объяснил, как создать процентное соотношение перекрестной таблицы Pandas с помощью аргумента нормализации в методе pd.crosstab() в Python. Здесь я взял три разных примера, чтобы проиллюстрировать, как создать перекрестную таблицу с процентами, для всех значений, значений строк и значений столбцов.