pandas rolling: скользящее среднее и размер окна
rolling в pandas вычисляет показатель в скользящем окне. window задаёт размер окна, а min_periods — минимальное число непустых наблюдений для результата; до этого порога получается NaN.
Почему важен порядок строк
Для окна window=3 без явного min_periods обычно требуется три наблюдения: первые две позиции дают NaN. При min_periods=1 расчёт начнётся с первой заполненной позиции. Это разные требования к полноте данных, а не просто оформление вывода.
Перед расчётом временного показателя отсортируйте строки по времени. Целочисленное окно считает строки, а окно вроде "7D" использует временной интервал при подходящем индексе. Для нескольких независимых объектов не смешивайте их наблюдения в одном общем окне.
Пример на других данных
import pandas as pd
s = pd.Series([2., 4., 6., 8.])
full = s.rolling(window=3).mean()
partial = s.rolling(window=3, min_periods=1).mean()
print(int(full.isna().sum()))
print(partial.tolist())
Результат:
2
[2.0, 3.0, 4.0, 6.0]
Попробуйте сами
Ниже — отдельное упражнение: напишите код и запустите проверку. Другие упражнения по этой теме. Для обучения по порядку откройте бесплатный курс NumPy и pandas.
Скользящее среднее и сумма: window, min_periods и проверка NaN
Вы получаете временной ряд показателей датчика. Нужно:
- отсортировать данные по дню;
- вычислить скользящее среднее и скользящую сумму с заданным окном;
- вывести количество строк с NaN в каждом из двух новых столбцов.
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая:
- Читает из
stdinдва целых числаnиw— количество строк и размер скользящего окна. - Читает следующие
nстрок; каждая содержит два токена через пробел:day(целое число) иvalue(целое число). Строки могут быть в произвольном порядке. - Создаёт
pd.DataFrameсо столбцами'day'и'value'. - Сортирует DataFrame по
'day'черезsort_valuesи сбрасывает индекс черезreset_index(drop=True). Сохраняет результат обратно вdf. - Добавляет столбец
'roll_mean'— скользящее среднее'value'сwindow=w(параметрmin_periodsоставьте по умолчанию, то есть равнымw). - Добавляет столбец
'roll_sum'— скользящую сумму'value'сwindow=w(параметрmin_periodsоставьте по умолчанию). - Выводит в
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'>
Пример
- Ввод
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
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- rolling: скользящие агрегаты по упорядоченным данным — задача по NumPy и pandas
- Pandas rolling: minperiods и неполное окно
- Pandas rolling minperiods: сравните два скользящих средних
- pandas rolling: порядок строк, размер окна и NaN
- pandas rolling: скользящая сумма после сортировки таблицы
- pandas Series из словаря: index, shape и dtype
