Функция groupby() в pandas: группировка и агрегация

df.groupby(ключ) разбивает DataFrame на группы по значению колонки и позволяет посчитать агрегаты внутри каждой — сумму, среднее, количество. Это pandas-аналог GROUP BY в SQL и один из самых частых инструментов аналитика: выручка по менеджерам, метрики по когортам, статистика по категориям.

Синтаксис

df.groupby('колонка').agg(имя=('колонка', 'функция'))

Примеры использования

Пример 1: Несколько метрик за один проход (named aggregation)

df.groupby('manager').agg(
    total=('amount', 'sum'),
    avg=('amount', 'mean'),
    deals=('amount', 'count'),
)

Результат:

         total   avg  deals
manager
Anna       400  200.0     2
Bob        200   66.7     3

Пример 2: Доля строки внутри группы через transform

df['share'] = df['amount'] / df.groupby('manager')['amount'].transform('sum')

Результат:

  manager  amount  share
0    Anna     100   0.25
1    Anna     300   0.75
Порешать Python-задачи в тренажёре →

Типичная ошибка

По умолчанию колонка группировки уходит в индекс — если нужен обычный столбец, добавь as_index=False или .reset_index(). Named aggregation (.agg(name=(col, func))) даёт чистые имена без MultiIndex, в отличие от .agg(['sum','mean']). И помни: groupby по умолчанию выкидывает группы с NaN в ключе — для их сохранения ставь dropna=False.

Где спрашивают на собеседовании

groupby — базовый вопрос на собеседовании по pandas. Спрашивают разницу между agg (агрегат, схлопывает группу), transform (результат длины исходного df, для доли/нормализации) и apply (произвольная функция). Умей объяснить связь с SQL GROUP BY.

FAQ: частые вопросы про groupby

В чём разница agg, transform и apply в groupby?

agg возвращает по одному значению на группу (схлопывает). transform возвращает результат той же длины, что исходный df (удобно для доли внутри группы). apply — самый гибкий, но медленный: применяет произвольную функцию к каждой группе.

Как посчитать несколько агрегатов сразу?

Named aggregation: df.groupby('k').agg(total=('x','sum'), avg=('x','mean')) — чистые имена колонок за один проход, без MultiIndex.

Почему после groupby колонка стала индексом?

По умолчанию ключ группировки становится индексом. Верни его в столбцы через as_index=False в groupby или .reset_index() после агрегации.

Задачи в тренажёре по теме

Вопросы с собеседований по теме

Смежные темы Python

Pandas groupby · Pandas: основы

Другие функции pandas

merge · pivot_table · apply · value_counts · drop_duplicates · fillna

Открыть Python-тренажёр (556 задач) →