Короткий ответ
groupby даёт более общий и гибкий инструмент агрегации с результатом в "длинном" формате, а pivot_table — это надстройка над groupby, сразу разворачивающая одну из группировочных переменных в столбцы, то есть удобна для получения "широкой" сводной таблицы.
Как это работает подробнее
pivot_table(values, index, columns, aggfunc) внутри фактически делает groupby по комбинации index и columns, а затем разворачивает значения columns в отдельные столбцы результата; groupby без columns оставляет результат в виде одного или нескольких уровней индекса без разворота.
Пример кода
question-119.py
import pandas as pd
df = pd.DataFrame({
'month': ['Jan', 'Jan', 'Feb', 'Feb'],
'category': ['A', 'B', 'A', 'B'],
'sales': [100, 150, 120, 130]
})
pivot = df.pivot_table(values='sales', index='month', columns='category', aggfunc='sum')
print(pivot)Что использовать на практике
- Практика. pivot_table удобен для отчётов вида "строки — месяцы, столбцы — категории, значения — сумма продаж", которые удобно читать визуально; groupby лучше подходит, когда результат нужен для дальнейших программных вычислений или объединения с другими таблицами, так как длинный формат проще обрабатывать дальше.
- Проверка. итоговая таблица должна содержать строки Jan/Feb и столбцы A/B с суммами 100, 150, 120, 130 на соответствующих пересечениях, что совпадает с исходными данными.
Подводные камни
- Частая ошибка. забывают указать aggfunc в pivot_table и получают среднее по умолчанию там, где по смыслу нужна сумма или количество; создают широкую сводную таблицу для дальнейшего программного анализа, а не для визуального отчёта, что усложняет последующие join и группировки по сравнению с длинным форматом.