Метод rolling
Метод rolling применяется к DataFrame
и возвращает объект Rolling, который позволяет
выполнять агрегацию по скользящему окну. Основной параметр
window задаёт размер окна в количестве строк.
Метод часто используют для сглаживания временных рядов
и расчёта скользящих средних.
Дополнительные параметры управляют поведением окна:
min_periods определяет минимальное количество значений
в окне для расчёта, center смещает окно так,
чтобы текущая строка была в центре, а win_type
задаёт тип весового окна.
Синтаксис
df.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)
Пример
Давайте создадим таблицу и вычислим скользящее среднее по окну из трёх строк:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
res = df.rolling(window=3).mean()
print(res)
Результат выполнения кода:
a b
0 NaN NaN
1 NaN NaN
2 2.0 20.0
3 3.0 30.0
4 4.0 40.0
Пример
Вторым параметром можно задать минимальное количество
значений, необходимых для вычислений. Например,
установим 2, тогда первые две строки
будут иметь значения, а первая останется пустой:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
res = df.rolling(window=3, min_periods=2).mean()
print(res)
Результат выполнения кода:
a b
0 NaN NaN
1 1.5 15.0
2 2.0 20.0
3 3.0 30.0
4 4.0 40.0
Пример
С помощью параметра center можно сместить
окно так, чтобы текущая строка оказалась в центре.
Это часто используют для центрированных скользящих средних:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
res = df.rolling(window=3, center=True).mean()
print(res)
Результат выполнения кода:
a b
0 NaN NaN
1 2.0 20.0
2 3.0 30.0
3 4.0 40.0
4 NaN NaN
Пример
Метод rolling можно использовать с разными
агрегирующими функциями, например, суммой
или стандартным отклонением:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
res_sum = df.rolling(window=2).sum()
res_std = df.rolling(window=3).std()
print("Sum:\n", res_sum)
print("Std:\n", res_std)
Результат выполнения кода:
Sum:
a b
0 NaN NaN
1 3.0 30.0
2 5.0 50.0
3 7.0 70.0
4 9.0 90.0
Std:
a b
0 NaN NaN
1 NaN NaN
2 1.000000 10.000000
3 1.000000 10.000000
4 1.000000 10.000000