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
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_table и groupby, когда просят «сделать сводку дата × категория» из длинной таблицы; частый follow-up — чем pivot отличается от pivot_table.
pivot только переставляет данные и падает с ошибкой на дублирующихся парах index/columns. pivot_table умеет агрегировать (aggfunc='mean' по умолчанию) и молча схлопывает дубли. Если нужны суммы или средние — берите pivot_table; если данные уже уникальны — pivot быстрее и прозрачнее.
Значит, для одной пары index+columns есть несколько строк, а pivot не знает, какую взять. Решение — либо агрегировать через pivot_table, либо добавить в index колонку, которая делает строки уникальными.
Да, передайте список в values, например values=['amount','orders'] — получите столбцы с MultiIndex: верхний уровень это имя показателя, нижний — значения columns. Если values не указать, pivot возьмёт все оставшиеся колонки.
Pandas groupby · Pandas: основы
groupby · merge · pivot_table · apply · value_counts · drop_duplicates
Открыть Python-тренажёр (556 задач) →