Задача курса

pandas rolling по группам: скользящая сумма регионов

Курс «NumPy и pandas: практический тренажёр» · урок «rolling: скользящие агрегаты по упорядоченным данным»

Условие

Скользящая сумма по регионам: сортировка, rolling и NaN-диагностика

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

  • отсортировать данные по региону и месяцу;
  • вычислить скользящую сумму по всему DataFrame (не по группам) с заданным окном;
  • подсчитать и вывести количество NaN в результате;
  • вывести значения скользящей суммы в порядке сортировки.

Что уже дано

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

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

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

  1. Читает из stdin два целых числа n и w — количество строк и размер скользящего окна.
  2. Читает следующие n строк; каждая содержит три токена через пробел: region (строка без пробелов), month (целое число) и sales (целое число). Строки могут быть в произвольном порядке.
  3. Создаёт pd.DataFrame со столбцами 'region', 'month', 'sales'.
  4. Сортирует DataFrame по ['region', 'month'] через sort_values и сбрасывает индекс через reset_index(drop=True). Сохраняет результат обратно в df.
  5. Добавляет столбец 'roll_sum' — скользящую сумму 'sales' с window=w и min_periods по умолчанию (равным w).
  6. Выводит в 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
Без регистрации · результат не сохраняется
pandas rolling по группам: скользящая сумма регионов