pandas groupby: ранг и накопительная сумма по группам
В отчёте по продажам ранг нужен внутри региона, а накопительная сумма — в порядке месяцев. Заготовка считает показатели по всей таблице и теряет эту связь. Исправьте группировку и порядок строк, затем сравните полученные показатели.
Найди и исправь: три ошибки в cumsum и rank внутри группы
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет.
В редакторе уже есть сломанный код. В нём ровно три ошибки в трёх независимых строках:
Столбец
'cum_sales'вычисляется черезdf['sales'].cumsum()до сортировки по'month'— из-за этого накопление идёт не в хронологическом порядке. Нужно сначала отсортировать DataFrame по['region', 'month']черезsort_valuesи сбросить индекс черезreset_index(drop=True), а затем вызыватьcumsum.Ранг внутри региона вычисляется через
df['sales'].rank(method='min', ascending=False)— это глобальный ранг по всему DataFrame, а не внутри группы. Нужно заменить наdf.groupby('region')['sales'].rank(method='min', ascending=False).Накопительная сумма считается через
df['sales'].cumsum()вместоdf.groupby('region')['sales'].cumsum()— накопление идёт по всему DataFrame, а не отдельно внутри каждого региона.
Каждая ошибка — в отдельной строке кода. Исправьте все три.
Что нужно сделать
Исправьте три ошибки так, чтобы программа:
- Читала из
stdinцелое числоn— количество строк. - Читала следующие
nстрок; каждая содержит три токена через пробел:region(строка без пробелов),month(целое число),sales(целое число). Пример строки:Север 1 200. - Создавала
pd.DataFrameс именемdfсо столбцами'region','month','sales'. - Сортировала
dfпо['region', 'month']черезsort_valuesи сбрасывала индекс черезreset_index(drop=True)до вычисления cumsum. - Добавляла столбец
'rank_in_region'— рангsalesвнутри каждогоregionпо убыванию,method='min', черезgroupby + rank. - Добавляла столбец
'cum_sales'— накопительную суммуsalesвнутри каждогоregionв текущем (уже отсортированном) порядке строк черезgroupby + cumsum. - Выводила в
stdoutзаголовокregion month sales rank_in_region cum_sales, затем строки таблицы через пробел;rank_in_regionвыводить как целое число.
Ввод и вывод
Программа читает stdin и пишет в stdout.
Ограничения: n >= 1.
Формат ввода
n region1 month1 sales1 region2 month2 sales2 ...
Формат вывода
region month sales rank_in_region cum_sales region1 month1 sales1 rr1 cs1 ...
Пример
- Ввод
6 Север 1 200 Юг 1 150 Север 2 300 Юг 2 400 Север 3 250 Юг 3 100
- Вывод
region month sales rank_in_region cum_sales Север 1 200 3 200 Север 2 300 1 500 Север 3 250 2 750 Юг 1 150 2 150 Юг 2 400 1 550 Юг 3 100 3 650
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- Pandas rank method=min: одинаковые значения и ранги
- rank и cumsum: ранги и накопительные показатели — задача по NumPy и pandas
- pandas rank и cumsum по группам: ранг и накопительная сумма
- pandas rank: average, dense и одинаковые значения
- Pandas groupby cumsum и rank: накопительный итог по отделам
- pandas Series из словаря: index, shape и dtype
