Pandas groupby cumsum и rank: накопительный итог по отделам

Накопительная сумма зависит от порядка строк. Групповой cumsum начинает накопление заново внутри каждой группы, а обычный cumsum продолжает его по всей последовательности.

Не смешивайте эти два показателя с рангом: rank сравнивает значения и отдельно обрабатывает совпадения. В упражнении нужно сохранить требуемую схему таблицы и рассчитать несколько показателей с разной областью действия.

Проверьте решение без регистрации. Объяснения и последовательная практика — в курсе «NumPy и pandas: практический тренажёр».

Отдел и месяц: глобальный ранг, накопительная сумма внутри отдела и общая накопительная сумма

Вы получаете таблицу продаж по отделам и месяцам. Нужно вычислить глобальный ранг каждой строки, накопительную сумму продаж внутри каждого отдела и накопительную сумму по всей таблице.

Что уже дано

Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.

Что нужно сделать

Напишите программу, которая:

  1. Читает из stdin целое число n — количество строк.
  2. Читает следующие n строк; каждая содержит три токена через пробел: dept (строка без пробелов), month (целое число), sales (целое число). Пример строки: HR 1 200.
  3. Создаёт pd.DataFrame из словаря списков с ключами 'dept', 'month', 'sales'.
  4. Добавляет столбец rank_global — ранг каждой строки среди всех строк по убыванию sales, method='min'. Ранг вычисляется до сортировки и сохраняется как целое число.
  5. Сортирует DataFrame по ['dept', 'month'] (оба по возрастанию) через sort_values и сбрасывает индекс через reset_index(drop=True).
  6. Добавляет столбец cum_sales_dept — накопительную сумму sales внутри каждого dept в текущем (уже отсортированном) порядке через df.groupby('dept')['sales'].cumsum().
  7. Добавляет столбец cum_sales_all — накопительную сумму sales по всей таблице в текущем порядке через df['sales'].cumsum().
  8. Выводит в 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
РешениеPython

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Связанные задачи