pandasОсновыMediumБесплатно~8 мин

Named aggregations: 4 метрики по сегментам

// Условие

Таблица df — заказы маркетплейса, разбитые на сегменты A, B, C.

Что нужно
Возьми только completed-заказы и для каждого сегмента посчитай сразу 4 метрики:
  • total_revenue — суммарный amount;
  • order_count — число заказов;
  • unique_users — уникальные user_id;
  • avg_check — средний amount.
Верни DataFrame с колонками segment, total_revenue, order_count, unique_users, avg_check. Сортировка по total_revenue по убыванию.

// Данные

df: order_id, user_id, order_date, amount, category, status, segment
▶ Решить в pandas-тренажёре

// Решение

Подсказка

Сначала фильтр: df[df['status'] == 'completed']. Потом .groupby('segment').

Для нескольких метрик сразу используй .agg() со словарём или named-аргументами. Named-аgg — современный способ: .agg(total_revenue=('amount','sum'), order_count=('order_id','count'), ...).

Полная цепочка: .agg(total_revenue=('amount','sum'), order_count=('order_id','count'), unique_users=('user_id','nunique'), avg_check=('amount','mean')).reset_index().sort_values('total_revenue', ascending=False).

Сначала попробуй сам → Показать решение
df = load_data()

# Named aggregation — современный читаемый API (pandas >= 0.25)
result = (df[df['status'] == 'completed']
          .groupby('segment')
          .agg(total_revenue=('amount', 'sum'),
               order_count=('order_id', 'count'),
               unique_users=('user_id', 'nunique'),
               avg_check=('amount', 'mean'))
          .reset_index()
          .sort_values('total_revenue', ascending=False)
          .reset_index(drop=True))

print(result)

Named aggregation agg(name=(col, func)) — современный и читаемый API с pandas 0.25+. Сразу даёт плоские имена колонок, не нужно сглаживать MultiIndex. Альтернатива через словарь: .agg({'amount': ['sum', 'mean'], 'order_id': 'count', 'user_id': 'nunique'}) — даёт MultiIndex-колонки, потом придётся делать columns = ['_'.join(c) for c in df.columns]. Ещё вариант: отдельные groupby через .merge() — но это 4 прохода по данным вместо одного. Named-agg выигрывает по читаемости и скорости.

// Похожие задачи

// Разобраться в теме

→ pandas для аналитика