Функция rolling() в pandas: скользящее окно

df.rolling(window) создаёт скользящее окно фиксированного размера, по которому считают агрегат: скользящее среднее (moving average), сумму, максимум. Это базовый приём сглаживания временных рядов — убрать шум и увидеть тренд. Аналитик применяет его для MA-графиков DAU, выручки, метрик.

Синтаксис

df['col'].rolling(window=7, min_periods=1).mean()

Примеры использования

Пример 1: Скользящее среднее за 3 дня

df['ma_3'] = df['dau'].rolling(3, min_periods=1).mean()

Результат:

   dau   ma_3
0  100  100.0
1  200  150.0
2  300  200.0

Пример 2: Скользящая сумma за 7 дней

df['weekly'] = df['sales'].rolling(7).sum()

Результат:

(первые 6 строк NaN — окна ещё нет)
Порешать Python-задачи в тренажёре →

Типичная ошибка

По умолчанию первые (window-1) строк дают NaN — окна ещё не хватает. min_periods=1 разрешает считать по неполному окну с начала ряда. rolling смотрит на ПОЗИЦИИ, а не на даты: если в ряду есть пропущенные дни, окно «3 строки» захватит не «3 дня». Для окна по времени используй rolling('3D') на datetime-индексе. Данные должны быть отсортированы по времени.

Где спрашивают на собеседовании

rolling — стандартный вопрос по временным рядам: посчитать скользящее среднее, сгладить метрику. Ценят понимание, что окно по строкам ≠ окно по дням при пропусках, и знание min_periods для начала ряда.

FAQ: частые вопросы про rolling

Почему rolling.mean() даёт NaN в начале?

Пока не накопилось window строк, окно неполное, и по умолчанию результат NaN. Поставь min_periods=1, чтобы считать по доступным строкам с самого начала.

Чем rolling отличается от expanding?

rolling — окно фиксированного размера (последние N строк). expanding — растущее окно от начала до текущей строки (для нарастающих метрик, как cumsum, но с любым агрегатом).

Как сделать окно по времени, а не по строкам?

Поставь datetime-индекс и задай окно строкой периода: df.rolling('7D').mean(). Тогда окно захватит 7 дней независимо от числа строк.

Задачи в тренажёре по теме

Вопросы с собеседований по теме

Смежные темы Python

Pandas: временные ряды

Другие функции pandas

to_datetime · resample · shift · diff · pct_change · merge_asof

Открыть Python-тренажёр (556 задач) →