Функция pivot_table() в pandas: сводные таблицы

df.pivot_table(index, columns, values, aggfunc) разворачивает длинный формат в матрицу: строки × столбцы со значением-агрегатом на пересечении. В отличие от pivot, pivot_table умеет агрегировать дубли и добавлять итоги (margins). Это pandas-аналог сводных таблиц Excel и PIVOT в SQL.

Синтаксис

df.pivot_table(index='...', columns='...', values='...', aggfunc='sum', margins=True)

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

Пример 1: Выручка регион × квартал + итоги

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

Пример 2: Обратно в длинный формат через melt

wide.melt(id_vars='region', var_name='quarter', value_name='revenue')

Результат:

(матрица снова стала длинной таблицей)
Порешать Python-задачи в тренажёре →

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

pivot_table по умолчанию агрегирует функцией mean, а не sum — явно задавай aggfunc, иначе получишь средние вместо сумм и не заметишь. margins=True добавляет строку и столбец с итогами; margins_name задаёт их подпись. fill_value=0 закрывает NaN в пустых ячейках. Если дублей в данных нет и агрегировать нечего — проще df.pivot (он упадёт на дублях).

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

pivot_table спрашивают в задачах на управленческую сводку «разверни строки в колонки». На собеседовании ценят знание разницы pivot vs pivot_table (второй агрегирует дубли и даёт margins) и парной операции melt для обратного разворота.

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

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

pivot требует уникальные пары index/columns и просто переставляет данные. pivot_table умеет агрегировать дубли (aggfunc) и добавлять итоги (margins) — поэтому в аналитике чаще берут именно его.

Как добавить итоговую строку и столбец?

margins=True добавляет подытоги по строкам и столбцам, margins_name='Total' задаёт их подпись. Правый нижний угол — общий итог (grand total).

Как развернуть сводную обратно в длинный вид?

df.melt(id_vars=[...], var_name=..., value_name=...) — операция, обратная pivot: колонки складываются обратно в строки.

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

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

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

Pandas: основы · Pandas groupby

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

groupby · merge · apply · value_counts · drop_duplicates · fillna

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