Pandas rolling minperiods: сравните два скользящих средних

rolling создаёт окно по последовательности наблюдений, а min_periods задаёт минимальное число наблюдений для расчёта. Поэтому первые строки результата могут содержать значения или NaN при одной и той же ширине окна.

До расчёта проверьте порядок временного ряда. Окно по числу строк и окно по календарному времени имеют разные правила. В задаче используется явно заданная ширина и сравниваются два режима одного расчёта.

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

min_periods=1 vs default: сравнение двух режимов скользящего среднего

Вы получаете временной ряд ежедневных показателей. Нужно вычислить скользящее среднее двумя способами — со стандартным min_periods и с min_periods=1 — и показать, чем они отличаются в первых строках.

Что уже дано

Проверяющая система запускает вашу программу и подаёт данные через 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_default' — скользящее среднее 'value' с window=w и min_periods по умолчанию (равным w).
  6. Добавляет столбец 'roll_mp1' — скользящее среднее 'value' с window=w и min_periods=1.
  7. Выводит в stdout ровно три строки:
  • строка 1: значения 'roll_default' через пробел, округлённые до 2 знаков; NaN выводится как строка nan;
  • строка 2: значения 'roll_mp1' через пробел, округлённые до 2 знаков;
  • строка 3: diff=<k> — число позиций, где 'roll_default' равен nan, а 'roll_mp1' — нет (то есть позиций, где два столбца дали разный результат из-за разного min_periods).

Ввод и вывод

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

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

Формат ввода

n w
day1 value1
day2 value2
...

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

<roll_default через пробел, NaN как 'nan'>
<roll_mp1 через пробел>
diff=<k>

Пример

Ввод
5 3
3 30
1 10
5 50
2 20
4 40
Вывод
nan nan 20.00 30.00 40.00
10.00 15.00 20.00 30.00 40.00
diff=2
РешениеPython

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

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

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