В чем разница между методами pivot и pivot_table в Pandas?

«В чем разница между методами pivot и pivot_table в Pandas?» — вопрос из категории Pandas и NumPy, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Оба метода преобразуют таблицу из длинного формата в широкий, но pivot_table — это более мощная и гибкая версия.

  • pivot — простой метод для перестановки данных. Он требует, чтобы комбинация значений, указанных в параметрах index и columns, была уникальной. Если найдутся дубликаты, метод выбросит ошибку ValueError. Агрегация данных не поддерживается.
  • pivot_table — метод для сводной таблицы (pivot table) с агрегацией. Он специально разработан для обработки дубликатов: если для одной ячейки сводной таблицы находится несколько значений, они агрегируются с помощью функции (по умолчанию mean).

Пример, показывающий разницу:

import pandas as pd

# Данные с дубликатом: продажи продукта 'A' 10 января учтены дважды
df = pd.DataFrame({
    'date': ['2024-01-10', '2024-01-10', '2024-01-11'],
    'product': ['A', 'A', 'B'],
    'sales': [100, 150, 200]
})

# pivot — УПАДЕТ С ОШИБКОЙ из-за дубликата (date='2024-01-10', product='A')
# df.pivot(index='date', columns='product', values='sales')

# pivot_table — КОРРЕКТНО просуммирует дубликаты
pivot_df = df.pivot_table(
    index='date',
    columns='product',
    values='sales',
    aggfunc='sum',  # Явно указываем функцию агрегации
    fill_value=0    # Заполняем пропуски нулями
)
print(pivot_df)
# product      A      B
# date
# 2024-01-10  250     0
# 2024-01-11    0   200

Вывод: Используйте pivot только когда уверены в уникальности ключей. В подавляющем большинстве реальных случаев, особенно с "сырыми" данными, нужен pivot_table с явным указанием aggfunc (например, 'sum', 'count', 'mean').