df.pivot_table(index='region', columns='quarter', values='revenue',
aggfunc='sum', fill_value=0, margins=True, margins_name='Total')
Результат:
quarter Q1 Q2 Total region Center 100 150 250 North 200 50 250 Total 300 200 500
wide.melt(id_vars='region', var_name='quarter', value_name='revenue')
Результат:
(матрица снова стала длинной таблицей)Порешать Python-задачи в тренажёре →
pivot_table спрашивают в задачах на управленческую сводку «разверни строки в колонки». На собеседовании ценят знание разницы pivot vs pivot_table (второй агрегирует дубли и даёт margins) и парной операции melt для обратного разворота.
pivot требует уникальные пары index/columns и просто переставляет данные. pivot_table умеет агрегировать дубли (aggfunc) и добавлять итоги (margins) — поэтому в аналитике чаще берут именно его.
margins=True добавляет подытоги по строкам и столбцам, margins_name='Total' задаёт их подпись. Правый нижний угол — общий итог (grand total).
df.melt(id_vars=[...], var_name=..., value_name=...) — операция, обратная pivot: колонки складываются обратно в строки.
Pandas: основы · Pandas groupby
groupby · merge · apply · value_counts · drop_duplicates · fillna
Открыть Python-тренажёр (556 задач) →