**Контекст:** вы аналитик в e-com маркетплейсе бытовой техники. Продакт просит на уровне каждой SKU-строки в выгрузке заказов видеть, какую долю выручки эта SKU делает внутри своей категории за месяц, и помечать «локомотивы» — SKU, дающие сверх 30% выручки категории. Важно: итоговый DataFrame должен остаться на том же гранулярном уровне, что и вход (одна строка = одна продажа), потому что дальше его джойнят с другими витринами по `order_id`.
У вас DataFrame `sales` с колонками: `order_id`, `sku`, `category`, `month` (период 'YYYY-MM'), `revenue` (float).
**Задание:**
1. Добавьте колонку `cat_month_revenue` — суммарная выручка категории за месяц, проставленная в КАЖДОЙ строке (без агрегации/потери строк).
2. Добавьте `share_in_category` — доля строки в выручке своей категории за месяц.
3. Добавьте булеву `is_locomotive` для SKU, чья доля в категории за месяц больше 30% (агрегируя по SKU внутри category+month).
4. Объясните, почему `groupby().transform()` здесь предпочтительнее, чем `groupby().sum()` + `merge`.
pandas groupby-transform window vectorization
Это задание для уровня Middle. Для middle-аналитиков с опытом 1-3 года, требует уверенного владения темой и понимания edge cases.
Подобные задания в категории «Python» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: pandas, groupby-transform, window, vectorization.
На реальном собеседовании на подобную задачу отводится 15-30 минут — оцениваются подход, корректность, обработка edge cases. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.
На zasqlpython.ru есть 530+ Python задачи с проверкой через Pyodide, конспекты Python и pandas, AI мок-собеседование с разбором ваших ответов.
← Все задания