GroupBy в Pandas: агрегация и трансформация данных

Мы просто и по делу рассказываем про ИИ-инструменты для работы: сравнения, пошаговые гайды, бесплатные альтернативы и реальные сценарии применения. Помогаем выбрать между ChatGPT, Gemini, Claude, локальными моделями и десятками узкоспециализированных сервисов — от дизайна и HR до аналитики и SEO. Меньше хайпа, больше практики и экономии времени каждый день.

pandasgroupbyагрегация

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 и практикой разработки.

🗣 Подборки каналов
🧠 Каталог ботов и приложений
🗺 Навигация

Читайте так же