Функция Pandas df.pivot()
df.pivot()является методом-членом DataFrame, используемым длясоздания сводных таблиц. Он может преобразовать данные в новую структуру на основе указанного индекса строк, индекса столбцов и столбцов значений.
иpivot_table()В отличие отpivot()не поддерживает операции агрегации и требует, чтобы комбинация индекса строк и индекса столбцов была уникальной; в противном случае будет вызвана ошибка.
Определение слова: pivotОзначает «вращать, поворачивать». Здесь речь идёт о «вращательном» изменении формы данных, позволяющем динамически переключать измерения строк и столбцов, как в сводной таблице.
Базовый синтаксис и параметры
df.pivot()является методом экземпляра DataFrame, вызываемым через оператор точки.
Формат синтаксиса
DataFrame.pivot(index=None, columns, values=None)
Описание параметра
- Параметр:
index- Тип: имя столбца, метка, список меток или None.
- Описание: столбец, используемый в качестве индекса строк нового DataFrame. Если None, используется существующий индекс строк.
- Параметр:
columns- Тип: имя столбца или метка.
- Описание:Обязательный параметр. Столбец, используемый в качестве индекса столбцов нового DataFrame, применяется для развертывания уникальных значений в имена столбцов.
- Параметр:
values- Тип: имя столбца, метка, список меток или None.
- Описание: столбец данных, используемый для заполнения DataFrame. Если не указан, используются все столбцы, кроме index и columns.
Описание функций
- Возвращаемое значение: Возвращает новый DataFrame, то есть сводную таблицу.
- Ограничение: Если комбинация index и columns содержит дублирующиеся значения, будет вызвана ошибка ValueError. В таких случаях следует использовать
pivot_table(), что автоматически выполняет агрегацию.
Примеры
Давайте подробно освоим на серии примеров от простого к сложномуdf.pivot()использование
Пример 1: Базовое использование - Создание простой сводной таблицы
Примеры
# 1. Создайте данные о продажах (каждая строка содержит комбинацию продукт-регион-продажи)
sales = pd.DataFrame({
'product': ['A', 'A', 'B', 'B', 'C', 'C'],
'region': ['North', 'South', 'North', 'South', 'North', 'South'],
'sales': [100, 150, 200, 180, 220, 250]
})
print("=== Исходные данные о продажах ===")
print(sales)
# 2. Используйте df.pivot() для создания сводной таблицы
# Индекс строки: product, индекс столбца: region, значение: sales
pivot_result = sales.pivot(index='product', columns='region', values='sales')
print("n=== df.pivot() Сводная таблица ===")
print(pivot_result)
Ожидаемый вывод:
=== 原始销售数据 === product region sales 0 A North 100 1 A South 150 2 B North 200 3 B South 180 4 C North 220 5 C South 250 === df.pivot() 透视表 === region North South product A 100 150 B 200 180 C 220 250
Пояснение кода:
- Исходные данные представлены в длинном формате, где каждая строка фиксирует продажи продукта в определённом регионе.
pivot()Используйте столбец product как индекс строк, столбец region как индекс столбцов, а sales как значения.- Результат — понятная двумерная таблица, позволяющая интуитивно сравнивать продажи разных продуктов в разных регионах.
Пример 2: Несколько столбцов значений — одновременная сводка нескольких метрик
Вы можете одновременно свести несколько числовых столбцов, чтобы получить более полное представление данных.
Примеры
# 1. Создайте данные, содержащие sales и quantity
sales = pd.DataFrame({
'product': ['A', 'A', 'B', 'B', 'A', 'A', 'B', 'B'],
'region': ['North', 'South', 'North', 'South', 'East', 'West', 'East', 'West'],
'sales': [100, 150, 200, 180, 120, 130, 190, 210],
'quantity': [10, 15, 20, 18, 12, 13, 19, 21]
})
print("=== Исходные данные ===")
print(sales)
# 2. Сводная таблица только по продажам
print("n=== Сводная таблица по продажам ===")
sales_pivot = sales.pivot(index='product', columns='region', values='sales')
print(sales_pivot)
# 3. Сводная таблица по продажам и количеству (без указания values, используются все числовые столбцы)
print("n=== Сводная таблица по нескольким метрикам ===")
multi_pivot = sales.pivot(index='product', columns='region')
print(multi_pivot)
Ожидаемый вывод:
=== 原始数据 ===
product region sales quantity
0 A North 100 10
1 A South 150 15
2 B North 200 20
3 B South 180 18
4 A East 120 12
5 A West 130 13
6 B East 190 19
7 B West 210 21
=== 销售额透视表 ===
region East North South West
product
A 120 100 150 130
B 190 200 180 210
=== 多指标透视 ===
sales quantity
region East North South West East North South West
product
A 120 100 150 130 12 10 15 13
B 190 200 180 210 19 20 18 21
Пояснение кода:
- Если не указать
valuesпараметр, будут использоваться все столбцы, кроме index и columns. - Сводное преобразование по нескольким столбцам создаёт многоуровневый индекс столбцов, где первый уровень — исходные названия столбцов, а второй — значения параметра columns.
- Этот подход позволяет одновременно сравнивать показатели нескольких метрик по разным измерениям.
Пример 3: Многоуровневый индекс — использование нескольких столбцов в качестве индекса строк.
Вы можете использовать несколько столбцов, чтобы создать сводную таблицу с иерархическим индексом.
Примеры
# 1. Создайте данные, содержащие информацию о годе, квартале и продукте
data = pd.DataFrame({
'year': [2023, 2023, 2023, 2023, 2024, 2024, 2024, 2024],
'quarter': ['Q1', 'Q1', 'Q2', 'Q2', 'Q1', 'Q1', 'Q2', 'Q2'],
'product': ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'],
'sales': [100, 150, 200, 180, 220, 250, 230, 270]
})
print("=== Исходные данные ===")
print(data)
# 2. Используйте несколько столбцов в качестве индекса строк (в виде списка)
print("n=== Multi-level Row Index Pivot ===")
pivot_multi = data.pivot(index=['year', 'quarter'], columns='product', values='sales')
print(pivot_multi)
# 3. Сбросить индекс, преобразовать в обычный DataFrame
print("n=== After Reset Index ===")
pivot_reset = pivot_multi.reset_index()
print(pivot_reset)
Ожидаемый вывод:
=== 原始数据 === year quarter product sales 0 2023 Q1 A 100 1 2023 Q1 B 150 值会抛出错误 - 这是 pivot() 和 pivot_table() 的关键区别:pivot() 要求数据唯一性,pivot_table() 会自动聚合重复值
Пояснение кода:
- Используя
index=['year', 'quarter']можно создать сводную таблицу с многоуровневым индексом строк. - Этот формат облегчает анализ эффективности различных продуктов во временном измерении.
- Используйте
reset_index()чтобы преобразовать иерархический индекс обратно в обычные столбцы.
Другие расширенияПримечание:Если исходные данные содержат ту же комбинацию индекса + столбцов,
pivot()вызоветValueError: Index contains duplicate entries. В таких случаях следует использоватьpivot_table(), который автоматически агрегирует повторяющиеся значения.
Pandas: общие функции