• Автор записи:
  • Рубрика записи:Pandas
  • Время чтения:3 минут чтения
  • Комментарии к записи:0 комментариев

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. Здесь я взял три разных примера, чтобы проиллюстрировать, как создать перекрестную таблицу с процентами, для всех значений, значений строк и значений столбцов.

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