Функция Pandas df.pivot()

Pandas 常用函数Pandas: общие функции


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: Базовое использование - Создание простой сводной таблицы

Примеры

import pandas as pd

# 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

Пояснение кода:

  1. Исходные данные представлены в длинном формате, где каждая строка фиксирует продажи продукта в определённом регионе.
  2. pivot()Используйте столбец product как индекс строк, столбец region как индекс столбцов, а sales как значения.
  3. Результат — понятная двумерная таблица, позволяющая интуитивно сравнивать продажи разных продуктов в разных регионах.

Пример 2: Несколько столбцов значений — одновременная сводка нескольких метрик

Вы можете одновременно свести несколько числовых столбцов, чтобы получить более полное представление данных.

Примеры

import pandas as pd

# 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: Многоуровневый индекс — использование нескольких столбцов в качестве индекса строк.

Вы можете использовать несколько столбцов, чтобы создать сводную таблицу с иерархическим индексом.

Примеры

import pandas as pd

# 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 常用函数Pandas: общие функции

Другие расширения