Метод median
Метод median аксессора rolling применяется к скользящему окну
и вычисляет медиану значений внутри этого окна. Медиана - это значение,
которое находится в середине отсортированного набора данных. В отличие
от среднего арифметического, медиана более устойчива к выбросам.
Метод не принимает никаких параметров, кроме стандартных для агрегации
(например, skipna для пропуска пропущенных значений). Результатом
является Series или DataFrame той же длины, что и исходный
объект, где для первых элементов (когда окно ещё не заполнено) будут
стоять пропущенные значения NaN.
Синтаксис
df.rolling(window).median()
Пример
Давайте создадим простой DataFrame и вычислим скользящую медиану
с окном размером в 3 элемента:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
res = df.rolling(window=3).median()
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
Первые два элемента содержат NaN, потому что для их вычисления
не хватает данных для заполнения окна. Для третьего элемента окно
включает значения [1, 2, 3], медиана которых равна 2.
Пример
Скользящую медиану можно вычислить и для Series. Рассмотрим
пример с окном размером 2:
import pandas as pd
ser = pd.Series([1, 3, 2, 4, 5])
res = ser.rolling(window=2).median()
print(res)
Результат выполнения кода:
0 NaN
1 2.0
2 2.5
3 3.0
4 4.5
dtype: float64
Для каждого элемента вычисляется медиана двух предыдущих значений включая текущее. При чётном размере окна медиана - это среднее арифметическое двух центральных значений.
Пример
Метод median можно комбинировать с другими параметрами
аксессора rolling, например, с центрированием окна:
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).median()
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
При центрировании окна медиана вычисляется для центрального элемента окна. Крайние элементы не могут быть вычислены, так как для них окно выходит за границы данных.