Named aggregations: 4 метрики по сегментам
// Условие
Таблица df — заказы маркетплейса, разбитые на сегменты A, B, C.
total_revenue— суммарныйamount;order_count— число заказов;unique_users— уникальныеuser_id;avg_check— среднийamount.
segment, total_revenue, order_count, unique_users, avg_check. Сортировка по total_revenue по убыванию.// Данные
order_id, user_id, order_date, amount, category, status, segment// Решение
Подсказка
Сначала фильтр: 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 выигрывает по читаемости и скорости.