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

Средний и медианный чек по категориям

// Условие

Таблица df — заказы маркетплейса за 2024 год.

Что нужно
Возьми только completed-заказы и для каждой категории посчитай средний и медианный amount. Верни DataFrame с колонками category, mean_amount, median_amount. Сортировка по mean_amount по убыванию.

В результате 6 строк (по числу категорий).

// Данные

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

// Решение

Подсказка

Сначала отфильтруй: df[df['status'] == 'completed']. Только потом агрегируй — иначе cancelled-заказы искажают чек.

После фильтра — .groupby('category')['amount'].agg(['mean', 'median']). Это даст MultiIndex-колонки, потом .reset_index().

Переименуй колонки: .rename(columns={'mean': 'mean_amount', 'median': 'median_amount'}). Потом .sort_values('mean_amount', ascending=False).

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

# Только completed + средний/медианный чек по категориям
result = (df[df['status'] == 'completed']
          .groupby('category')['amount']
          .agg(['mean', 'median'])
          .reset_index()
          .rename(columns={'mean': 'mean_amount', 'median': 'median_amount'})
          .sort_values('mean_amount', ascending=False)
          .reset_index(drop=True))

print(result)

Разница mean vs median — индикатор перекоса распределения. Если mean >> median — есть выбросы сверху (крупные заказы тянут среднее вверх). На собесе стоит заметить это и предложить посмотреть на P90/P95. Альтернатива через named-agg (pandas ≥ 0.25): .agg(mean_amount=('amount','mean'), median_amount=('amount','median')) — читаемее, не нужен rename.

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

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

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