В pandas “window functions” (оконные функции) реализуются с помощью методов .rolling(), .expanding() или .ewm() – в зависимости от типа окна (фиксированное, нарастающее или экспоненциальное).
Вот небольшой пример, демонстрирующий, как использовать скользящее окно (rolling) для вычисления среднего и стандартного отклонения.
Пример: скользящее среднее и стандартное отклонение продаж
import pandas as pd
# Создадим примерный DataFrame
data = {
"date": pd.date_range("2025-01-01", periods=10, freq="D"),
"sales": [100, 120, 90, 130, 150, 170, 160, 180, 200, 210]
}
df = pd.DataFrame(data)
# Считаем скользящее среднее и стандартное отклонение по окну = 3
df["rolling_mean"] = df["sales"].rolling(window=3).mean()
df["rolling_std"] = df["sales"].rolling(window=3).std()
print(df)
Результат:
date sales rolling_mean rolling_std
0 2025-01-01 100 NaN NaN
1 2025-01-02 120 NaN NaN
2 2025-01-03 90 103.333333 15.275252
3 2025-01-04 130 113.333333 20.816660
4 2025-01-05 150 123.333333 30.550505
...
Другой пример: оконная функция с groupby
Если нужно применить оконную функцию по каждой группе (например, по каждому магазину):
data = {
"store": ["A", "A", "A", "B", "B", "B"],
"day": [1, 2, 3, 1, 2, 3],
"sales": [10, 12, 15, 8, 9, 11]
}
df = pd.DataFrame(data)
# Скользящее среднее продаж по каждому магазину
df["rolling_avg"] = (
df.groupby("store")["sales"]
.transform(lambda x: x.rolling(window=2, min_periods=1).mean())
)
print(df)
Результат:
store day sales rolling_avg
0 A 1 10 10.0
1 A 2 12 11.0
2 A 3 15 13.5
3 B 1 8 8.0
4 B 2 9 8.5
5 B 3 11 10.0