Pandas rolling minperiods: сравните два скользящих средних
rolling создаёт окно по последовательности наблюдений, а min_periods задаёт минимальное число наблюдений для расчёта. Поэтому первые строки результата могут содержать значения или NaN при одной и той же ширине окна.
До расчёта проверьте порядок временного ряда. Окно по числу строк и окно по календарному времени имеют разные правила. В задаче используется явно заданная ширина и сравниваются два режима одного расчёта.
Проверьте решение без регистрации. Объяснения и последовательная практика — в курсе «NumPy и pandas: практический тренажёр».
min_periods=1 vs default: сравнение двух режимов скользящего среднего
Вы получаете временной ряд ежедневных показателей. Нужно вычислить скользящее среднее двумя способами — со стандартным min_periods и с min_periods=1 — и показать, чем они отличаются в первых строках.
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая:
- Читает из
stdinдва целых числаnиw— количество строк и размер скользящего окна. - Читает следующие
nстрок; каждая содержит два токена через пробел:day(целое число) иvalue(целое число). Строки могут быть в произвольном порядке. - Создаёт
pd.DataFrameсо столбцами'day'и'value'. - Сортирует DataFrame по
'day'черезsort_valuesи сбрасывает индекс черезreset_index(drop=True). Сохраняет результат обратно вdf. - Добавляет столбец
'roll_default'— скользящее среднее'value'сwindow=wиmin_periodsпо умолчанию (равнымw). - Добавляет столбец
'roll_mp1'— скользящее среднее'value'сwindow=wиmin_periods=1. - Выводит в
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
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- rolling: скользящие агрегаты по упорядоченным данным — задача по NumPy и pandas
- pandas rolling: скользящее среднее и размер окна
- pandas rolling: скользящая сумма после сортировки таблицы
- pandas Series из словаря: index, shape и dtype
- pandas DataFrame из списка словарей: пример и задача
- Загрузка CSV с явными типами и датами через readcsv — задача по NumPy и pandas
