Задача курса

pandas rolling: window и minperiods в задаче

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

Проверьте, как размер окна и минимальное число наблюдений влияют на первые значения ряда.

Условие

Скользящее среднее и сумма: window, min_periods и проверка NaN

Вы получаете временной ряд показателей датчика. Нужно:

  • отсортировать данные по дню;
  • вычислить скользящее среднее и скользящую сумму с заданным окном;
  • вывести количество строк с NaN в каждом из двух новых столбцов.

Что уже дано

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

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

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

  1. Читает из stdin два целых числа n и w — количество строк и размер скользящего окна.
  2. Читает следующие n строк; каждая содержит два токена через пробел: day (целое число) и value (целое число). Строки могут быть в произвольном порядке.
  3. Создаёт pd.DataFrame со столбцами 'day' и 'value'.
  4. Сортирует DataFrame по 'day' через sort_values и сбрасывает индекс через reset_index(drop=True). Сохраняет результат обратно в df.
  5. Добавляет столбец 'roll_mean' — скользящее среднее 'value' с window=w (параметр min_periods оставьте по умолчанию, то есть равным w).
  6. Добавляет столбец 'roll_sum' — скользящую сумму 'value' с window=w (параметр min_periods оставьте по умолчанию).
  7. Выводит в stdout ровно три строки:
  • строка 1: nan_mean=<k> — число строк с NaN в 'roll_mean';
  • строка 2: nan_sum=<k> — число строк с NaN в 'roll_sum';
  • строка 3: значения 'roll_mean' через пробел, округлённые до 2 знаков; NaN выводится как строка nan.

Ввод и вывод

Программа читает stdin и пишет в stdout.

Ограничения: n >= 1, w >= 1.

Формат ввода

n w
day1 value1
day2 value2
...

Формат вывода

nan_mean=<k>
nan_sum=<k>
<roll_mean через пробел, NaN как 'nan'>

Примеры

Пример 1

Ввод
5 3
3 30
1 10
5 50
2 20
4 40
Ожидаемый результат
nan_mean=2
nan_sum=2
nan nan 20.00 30.00 40.00

Попробуйте решить

РешениеPython
Без регистрации · результат не сохраняется