GroupBy в Pandas — один из ключевых инструментов для анализа данных. Он помогает быстро ответить на частые запросы: как посчитать среднее по категориям, найти сумму по группам, добавить агрегаты в исходную таблицу и преобразовать данные без ручных циклов.
По сути, groupby() работает по схеме:
разделить данные → применить функцию → собрать результат.
Базовая агрегация
Когда нужно получить сводную статистику по группам:
df.groupby('category')['sales'].sum()
Пример: суммарные продажи по каждой категории.
Можно считать сразу несколько метрик:
df.groupby('category')['sales'].agg(['sum', 'mean', 'max'])
Это удобно для аналитики, отчетов и быстрой проверки гипотез.
Агрегация по нескольким столбцам
Если нужна более детальная группировка:
df.groupby(['category', 'region'])['sales'].sum()
Так можно анализировать продажи по категориям и регионам одновременно.
Именованные агрегации
Полезно, когда нужен читаемый результат:
df.groupby('category').agg(
total_sales=('sales', 'sum'),
avg_sales=('sales', 'mean'),
orders=('sales', 'count')
)
Такой формат особенно хорош для production-кода и дашбордов ✅
Transform: вернуть результат в исходный DataFrame
agg() уменьшает таблицу до числа групп, а transform() сохраняет исходное количество строк. Это важно, если нужно добавить расчетный признак к каждой записи.
df['group_avg'] = df.groupby('category')['sales'].transform('mean')
Теперь у каждой строки есть среднее значение продаж по её категории.
Частый сценарий — нормализация внутри группы:
df['sales_diff'] = df['sales'] - df.groupby('category')['sales'].transform('mean')
Так можно увидеть отклонение каждой строки от среднего по группе.
Apply: гибкость, но осторожно
apply() позволяет запускать произвольную функцию:
df.groupby('category').apply(lambda x: x.nlargest(3, 'sales'))
Например, выбрать топ-3 записи в каждой категории. Но apply() часто медленнее agg() и transform(), поэтому использовать его стоит там, где стандартных методов недостаточно ⚙️
Частые ошибки
- Путаница между agg() и transform()
- Забытый reset_index() после группировки
- Использование apply() там, где хватило бы sum, mean или transform
- Ошибки с NaN в ключах группировки
Пример сброса индекса:
df.groupby('category', as_index=False)['sales'].sum()
Когда использовать
- agg() — когда нужен итог по группам
- transform() — когда нужно сохранить исходные строки
- apply() — когда логика нестандартная
GroupBy — это основа эффективной работы с табличными данными в Pandas. Если понимать разницу между агрегацией и трансформацией, можно писать более быстрый, чистый и понятный аналитический код 🚀
Подборку полезных каналов про IT стоит посмотреть тем, кто следит за Python, аналитикой данных, Pandas и практикой разработки.