Задача курса
pandas rolling по группам: скользящая сумма регионов
Курс «NumPy и pandas: практический тренажёр» · урок «rolling: скользящие агрегаты по упорядоченным данным»
Условие
Скользящая сумма по регионам: сортировка, rolling и NaN-диагностика
Вы получаете таблицу ежемесячных продаж по одному или нескольким регионам. Нужно:
- отсортировать данные по региону и месяцу;
- вычислить скользящую сумму по всему DataFrame (не по группам) с заданным окном;
- подсчитать и вывести количество NaN в результате;
- вывести значения скользящей суммы в порядке сортировки.
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая:
- Читает из
stdinдва целых числаnиw— количество строк и размер скользящего окна. - Читает следующие
nстрок; каждая содержит три токена через пробел:region(строка без пробелов),month(целое число) иsales(целое число). Строки могут быть в произвольном порядке. - Создаёт
pd.DataFrameсо столбцами'region','month','sales'. - Сортирует DataFrame по
['region', 'month']черезsort_valuesи сбрасывает индекс черезreset_index(drop=True). Сохраняет результат обратно вdf. - Добавляет столбец
'roll_sum'— скользящую сумму'sales'сwindow=wиmin_periodsпо умолчанию (равнымw). - Выводит в
stdoutровно три строки:
- строка 1:
nan_count=<k>— число строк с NaN в'roll_sum'; - строка 2: значения
'roll_sum'через пробел в порядке отсортированного DataFrame; NaN выводится как строкаnan; числовые значения выводятся как целые (без дробной части, например300, а не300.0); - строка 3:
regions=<список регионов>— уникальные значения столбца'region'в отсортированном порядке, через запятую без пробелов (напримерregions=Восток,Запад).
Ввод и вывод
Программа читает stdin и пишет в stdout.
Ограничения: n >= 1, w >= 1.
Формат ввода
n w region1 month1 sales1 region2 month2 sales2 ...
Формат вывода
nan_count=<k>
<roll_sum через пробел, NaN как 'nan', числа целыми>
regions=<регион1,регион2,...>
Примеры
Пример 1
- Ввод
6 3 Запад 2 150 Восток 1 100 Запад 1 200 Восток 3 300 Восток 2 400 Запад 3 250
- Ожидаемый результат
nan_count=2 nan nan 800 900 650 600 regions=Восток,Запад
Попробуйте решить
РешениеPython
Без регистрации · результат не сохраняется
