pandas pivot(): разворот длинной таблицы в широкую без агрегации

DataFrame.pivot переставляет длинную таблицу в широкую: уникальные значения одной колонки становятся новыми столбцами, другой — индексом строк. Агрегации внутри нет — если пара index+columns встречается дважды, метод падает с ошибкой. Аналитику это нужно для быстрых сводок вида «дата × канал» из уже уникальных данных. Для дублей и подсчёта сумм/средних берут родственный pivot_table.

Синтаксис

df.pivot(index=…, columns=…, values=…)

Примеры использования

Пример 1: Базовый разворот дата × канал

import pandas as pd
df = pd.DataFrame({
    'date': ['2026-01-01','2026-01-01','2026-01-02','2026-01-02'],
    'channel': ['seo','ads','seo','ads'],
    'amount': [100, 250, 140, 300]
})
df.pivot(index='date', columns='channel', values='amount')

Результат:

channel      ads  seo
date
2026-01-01   250  100
2026-01-02   300  140

Пример 2: Несколько показателей через список values

df2 = pd.DataFrame({
    'date': ['2026-01-01','2026-01-01','2026-01-02','2026-01-02'],
    'channel': ['seo','ads','seo','ads'],
    'amount': [100, 250, 140, 300],
    'orders': [4, 6, 5, 7]
})
df2.pivot(index='date', columns='channel', values=['amount','orders'])

Результат:

           amount      orders
channel       ads  seo    ads  seo
date
2026-01-01    250  100      6    4
2026-01-02    300  140      7    5
Порешать Python-задачи в тренажёре →

Типичная ошибка

pivot не агрегирует: при дублирующихся парах index+columns вылетает ValueError «Index contains duplicate entries, cannot reshape». Данные должны быть уникальны по (index, columns), иначе нужен pivot_table с aggfunc.

Где спрашивают на собеседовании

Спрашивают в паре с pivot_table и groupby, когда просят «сделать сводку дата × категория» из длинной таблицы; частый follow-up — чем pivot отличается от pivot_table.

FAQ: частые вопросы про pivot

Чем pivot отличается от pivot_table?

pivot только переставляет данные и падает с ошибкой на дублирующихся парах index/columns. pivot_table умеет агрегировать (aggfunc='mean' по умолчанию) и молча схлопывает дубли. Если нужны суммы или средние — берите pivot_table; если данные уже уникальны — pivot быстрее и прозрачнее.

Почему возникает ошибка «Index contains duplicate entries, cannot reshape»?

Значит, для одной пары index+columns есть несколько строк, а pivot не знает, какую взять. Решение — либо агрегировать через pivot_table, либо добавить в index колонку, которая делает строки уникальными.

Можно ли развернуть сразу несколько колонок значений?

Да, передайте список в values, например values=['amount','orders'] — получите столбцы с MultiIndex: верхний уровень это имя показателя, нижний — значения columns. Если values не указать, pivot возьмёт все оставшиеся колонки.

Задачи в тренажёре по теме

Вопросы с собеседований по теме

Смежные темы Python

Pandas groupby · Pandas: основы

Другие функции pandas

groupby · merge · pivot_table · apply · value_counts · drop_duplicates

Открыть Python-тренажёр (556 задач) →