groupby().agg() с именованной агрегацией — метрики с понятными именами

Именованная агрегация (named aggregation, с pandas 0.25) позволяет в groupby().agg() сразу задать имя результирующей колонки и пару (колонка, функция): df.groupby('channel').agg(revenue=('amount','sum')). Это убирает мультииндекс в колонках, который получается при старом синтаксисе со словарём, и делает результат готовым к дальнейшей работе. Каждый именованный аргумент — отдельная метрика, можно считать несколько функций по одной или разным колонкам за один проход.

Синтаксис

df.groupby('key').agg(new_name=('col', 'func'), …)

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

Пример 1: Одна метрика с именем

df.groupby('channel').agg(
    revenue=('amount', 'sum')
)

Результат:

          revenue
channel          
ads          4800
email         900
referral      800

Пример 2: Несколько агрегаций по группе

df.groupby('channel').agg(
    orders=('order_id', 'count'),
    revenue=('amount', 'sum'),
    avg_check=('amount', 'mean')
)

Результат:

          orders  revenue  avg_check
channel                             
ads            3     4800     1600.0
email          2      900      450.0
referral       1      800      800.0

Пример 3: Уникальные пользователи и максимум

df.groupby('channel').agg(
    users=('user_id', 'nunique'),
    max_amount=('amount', 'max')
)

Результат:

          users  max_amount
channel                    
ads           3        2100
email         2         450
referral      1         800
Порешать Python-задачи в тренажёре →

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

Синтаксис name=('col','func') требует pandas ≥0.25; в старых версиях именование делали через словарь, который теперь даёт FutureWarning и мультииндекс в колонках. По умолчанию ключ группировки уходит в индекс — добавь as_index=False или .reset_index(), чтобы вернуть его колонкой. Строковые имена функций ('sum','mean') быстрее, чем python-lambda, которую pandas считает по каждой группе отдельно.

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

Классический вопрос «посчитай выручку и число заказов по каналу» — named agg самый чистый ответ. Идёт в паре с reset_index(), sort_values() и pivot_table; проверяют, знаешь ли ты современный синтаксис вместо .agg({'amount':['sum','mean']}).

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

Чем named aggregation лучше agg({'amount': ['sum','mean']})?

Словарный синтаксис создаёт мультииндекс в колонках вида ('amount','sum'), с которым неудобно работать дальше. Named aggregation сразу даёт плоские осмысленные имена вроде revenue и avg_check. Плюс можно агрегировать разные колонки в одном вызове без вложенных структур.

Как посчитать несколько функций по одной колонке с именованной агрегацией?

Просто повторяй колонку с разными функциями: agg(total=('amount','sum'), avg=('amount','mean')). Каждый аргумент — отдельная выходная колонка. Это удобнее списка функций, потому что имена задаёшь сам.

Почему ключ группировки становится индексом, и как это отключить?

groupby по умолчанию кладёт ключ в индекс результата. Передай as_index=False в groupby(...) или вызови .reset_index() после agg, чтобы получить обычную колонку. Для дальнейших merge и сохранения в CSV обычно нужен именно reset_index().

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

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

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

Pandas groupby

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

groupby · pivot_table · value_counts · rank · pivot · stack / unstack

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