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