Pandas groupby cumsum и rank: накопительный итог по отделам
Накопительная сумма зависит от порядка строк. Групповой cumsum начинает накопление заново внутри каждой группы, а обычный cumsum продолжает его по всей последовательности.
Не смешивайте эти два показателя с рангом: rank сравнивает значения и отдельно обрабатывает совпадения. В упражнении нужно сохранить требуемую схему таблицы и рассчитать несколько показателей с разной областью действия.
Проверьте решение без регистрации. Объяснения и последовательная практика — в курсе «NumPy и pandas: практический тренажёр».
Отдел и месяц: глобальный ранг, накопительная сумма внутри отдела и общая накопительная сумма
Вы получаете таблицу продаж по отделам и месяцам. Нужно вычислить глобальный ранг каждой строки, накопительную сумму продаж внутри каждого отдела и накопительную сумму по всей таблице.
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая:
- Читает из
stdinцелое числоn— количество строк. - Читает следующие
nстрок; каждая содержит три токена через пробел:dept(строка без пробелов),month(целое число),sales(целое число). Пример строки:HR 1 200. - Создаёт
pd.DataFrameиз словаря списков с ключами'dept','month','sales'. - Добавляет столбец
rank_global— ранг каждой строки среди всех строк по убываниюsales,method='min'. Ранг вычисляется до сортировки и сохраняется как целое число. - Сортирует DataFrame по
['dept', 'month'](оба по возрастанию) черезsort_valuesи сбрасывает индекс черезreset_index(drop=True). - Добавляет столбец
cum_sales_dept— накопительную суммуsalesвнутри каждогоdeptв текущем (уже отсортированном) порядке черезdf.groupby('dept')['sales'].cumsum(). - Добавляет столбец
cum_sales_all— накопительную суммуsalesпо всей таблице в текущем порядке черезdf['sales'].cumsum(). - Выводит в
stdoutзаголовок и строки таблицы. Формат:
- первая строка:
dept month sales rank_global cum_sales_dept cum_sales_all - каждая следующая строка: значения через пробел;
rank_global,cum_sales_deptиcum_sales_allвыводить как целые числа.
Ввод и вывод
Программа читает stdin и пишет в stdout.
Формат ввода
n dept1 month1 sales1 dept2 month2 sales2 ...
Формат вывода
dept month sales rank_global cum_sales_dept cum_sales_all dept1 month1 sales1 rg1 csd1 csa1 ...
Пример
- Ввод
6 HR 1 200 HR 2 150 HR 3 400 IT 1 100 IT 2 300 IT 3 250
- Вывод
dept month sales rank_global cum_sales_dept cum_sales_all HR 1 200 4 200 200 HR 2 150 5 350 350 HR 3 400 1 750 750 IT 1 100 6 100 850 IT 2 300 2 400 1150 IT 3 250 3 650 1400
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- rank и cumsum: ранги и накопительные показатели — задача по NumPy и pandas
- pandas rank и cumsum по группам: ранг и накопительная сумма
- pandas rank: average, dense и одинаковые значения
- pandas Series из словаря: index, shape и dtype
- pandas DataFrame из списка словарей: пример и задача
- Загрузка CSV с явными типами и датами через readcsv — задача по NumPy и pandas
