Оконные функции в Pandas помогают анализировать данные во времени: сглаживать шум, считать накопительные метрики и учитывать «вес» последних наблюдений. Это базовый инструмент для аналитики, финтеха, мониторинга и ML-preprocessing.
rolling() — скользящее окно
Используется, когда нужно считать метрику по фиксированному числу последних строк или по временному интервалу.
Примеры задач:
- скользящее среднее продаж
- локальная волатильность
- минимум/максимум за последние N дней
df['ma_7'] = df['sales'].rolling(7).mean()
df['std_7'] = df['sales'].rolling(7).std()
Если индекс — дата, можно использовать временное окно:
df['ma_30d'] = df['sales'].rolling('30D').mean()
Важно:
- первые значения будут
NaN, пока окно не заполнится - параметр
min_periodsпозволяет считать раньше center=Trueцентрирует окно относительно текущей точки
expanding() — накопительное окно
Считает метрику от начала ряда до текущей строки. Подходит для cumulative-аналитики.
df['cum_avg'] = df['sales'].expanding().mean()
df['cum_max'] = df['sales'].expanding().max()
Когда полезно:
- накопительное среднее
- контроль стабильности метрики
- анализ роста показателя с начала периода 📈
ewm() — экспоненциально взвешенное окно
Придает больший вес свежим данным и меньший — старым. Это особенно полезно, когда последние изменения важнее исторических.
df['ema'] = df['sales'].ewm(span=7).mean()
Где применяется:
- EMA в финансовом анализе
- сглаживание временных рядов
- чувствительные к тренду метрики
Ключевые параметры:
span— популярный способ задать «ширину» окнаalpha— коэффициент сглаживанияadjust=False— часто используют для более «практического» поведения EMA
Что выбрать? 🤔
rolling— если нужен анализ по фиксированному окнуexpanding— если важна динамика от начала наблюденийewm— если приоритет у последних значений
Типичные ошибки ⚠️
- использовать
rolling()на неотсортированных данных - забывать про
NaNв начале ряда - смешивать оконный расчет по строкам и по времени
- применять
ewm()без понимания, какspanвлияет на чувствительность
Мини-шпаргалка
# Скользящее среднее
df['x'].rolling(5).mean()
# Накопительная сумма
df['x'].expanding().sum()
# Экспоненциальное сглаживание
df['x'].ewm(span=10).mean()
Оконные функции в Pandas — это простой способ превратить «сырые» временные данные в понятные сигналы для анализа, отчетности и моделей. 🧠
Подборку каналов про IT — с Python, data analytics, backend и engineering practice — стоит сохранить отдельно в закладки.