pivot_table, melt и crosstab в pandas

0 задач Pyodide в браузере С эталонными решениями 2026 — с реальных собесов
Смена формы таблицы — то, без чего не собрать ни когортную матрицу, ни кросс-таб конверсии. pivot_table разворачивает длинную таблицу в широкую с агрегацией: pd.pivot_table(df, index='категория', columns='месяц', values='выручка', aggfunc='sum') — и на пересечении строки и столбца лежит сумма. В отличие от простого pivot, здесь можно агрегировать дубли и задать fill_value для пустых ячеек. melt делает обратное — расплавляет wide в long (id_vars фиксируешь, остальные колонки уезжают в две колонки variable/value), это нужно перед построением графиков в seaborn или загрузкой в BI. crosstab — быстрый способ построить таблицу частот двух признаков, а с normalize='index' сразу получить доли по строкам (например, конверсию по сегментам). На собесе Avito или Wildberries любят задачу «построй матрицу retention по когортам» — это ровно pivot_table поверх groupby. Здесь задачи на все три метода с датасетами в браузере.
Начать решать задачи →

Все задачи на «pandas-pivot» (0)

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

pivot или pivot_table — что использовать?

pivot требует уникальных пар index-columns и падает с ошибкой при дублях — он просто перекладывает значения. pivot_table умеет агрегировать дубли через aggfunc (по умолчанию mean), задавать fill_value и margins для итогов. На практике почти всегда берут pivot_table: он покрывает случай pivot и не ломается на реальных данных с повторами.

Как развернуть melt обратно в широкий формат?

melt превращает wide в long: pd.melt(df, id_vars=['id'], value_vars=['jan','feb']) даёт колонки variable и value. Обратно — pivot или pivot_table: df.pivot(index='id', columns='variable', values='value'). Пара melt → pivot часто нужна, когда данные приходят в неудобной форме и надо их нормализовать перед джойном.

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

crosstab — это pivot_table, заточенный под подсчёт частот: pd.crosstab(df.сегмент, df.статус) сразу считает количество пересечений без указания values/aggfunc. С normalize='index' получаешь доли по строкам, normalize='columns' — по столбцам. pivot_table универсальнее (любая aggfunc по любой метрике), crosstab короче для таблиц сопряжённости.

Как построить когортную матрицу retention через pivot_table?

Сначала groupby по когорте (месяц регистрации) и номеру периода, считаешь число активных. Потом pivot_table(index='когорта', columns='период', values='активные', aggfunc='sum'). Делишь каждую строку на её нулевой период — получаешь проценты удержания. Это стандартная задача продуктовой аналитики на собесе.

Что делать с NaN в pivot_table?

Пустые пересечения (нет данных для комбинации index-columns) заполняются NaN. Параметр fill_value=0 сразу подставляет ноль — удобно для матриц частот и retention, где пропуск означает «событий не было». Для итоговых строк и столбцов добавь margins=True, margins_name='Итого'.

Связанные темы Python

Pandas: основы · Pandas groupby · Pandas merge / join · Pandas: временные ряды · NumPy векторизация · scipy: A/B-тесты · sklearn для аналитика · Графики: matplotlib / seaborn

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