Собесов

Сценарий: чем pivot отличается от pivot_table и когда использовать каждую

PythonPandas базовый workflowЛёгкаяJunior

Условие

В чём разница между df.pivot(...) и df.pivot_table(...)? Когда первая падает с ошибкой, а вторая работает? Покажи примеры на датафрейме sales(date, product, revenue).

Решение

Главное отличие

  • pivot — простой reshape, требует, чтобы пара (index, columns) была уникальной. Если есть дубли — ValueError: Index contains duplicate entries, cannot reshape.
  • pivot_table — агрегирует дубликаты функцией aggfunc (по умолчанию mean). Это «pivot + groupby в одном».

Примеры

import pandas as pd
 
# Если данные уже агрегированы (одна строка на пару date×product):
wide = sales.pivot(index='date', columns='product', values='revenue')
 
# Если в данных по нескольку строк на пару — нужно агрегировать:
wide = sales.pivot_table(
    index='date',
    columns='product',
    values='revenue',
    aggfunc='sum',          # 'mean' по умолчанию — опасно для денег
    fill_value=0,
    margins=True,           # добавит итоги
)

Подводные камни

  1. Дефолтный aggfunc='mean' в pivot_table для сумм/выручки даёт некорректный результат — всегда явно указывайте aggfunc='sum'.
  2. pivot не умеет несколько values через aggfunc — для multi-metric нужен pivot_table со списком values и aggfunc.
  3. fill_value=0 нужен явно, иначе пустые ячейки будут NaN и сломают арифметику дальше.
  4. margins=True добавляет строку/колонку All — её надо помнить и фильтровать, если считается дальше.
  5. pivot_table может неожиданно отсортировать колонки лексикографически — для категориальных порядков задавайте Categorical(ordered=True).

Эталонный ответ

pivot — reshape без агрегации, требует уникальности; pivot_table — reshape + groupby, агрегирует дубли. Для аналитики почти всегда нужен pivot_table с явным aggfunc='sum' и fill_value=0.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти