Метод rank аксессора rolling
Метод rank аксессора rolling применяется к Series или DataFrame
и вычисляет ранги значений в каждом скользящем окне.
Первым параметром можно передать метод ранжирования (по умолчанию average).
Второй параметр определяет, следует ли ранжировать по возрастанию (по умолчанию True).
Метод возвращает объект того же типа, что и исходный, с вычисленными рангами.
Синтаксис
df.rolling(window).rank([method, ascending])
Пример
Давайте вычислим ранги в скользящем окне размером 3 для колонки 'a':
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
res = df['a'].rolling(3).rank()
print(res)
Результат выполнения кода:
0 NaN
1 NaN
2 2.0
3 2.0
4 2.0
dtype: float64
Пример
Теперь применим метод rank с параметром min, который присваивает минимальный ранг для одинаковых значений:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 2, 4, 5],
'b': [10, 20, 20, 40, 50]
})
res = df['b'].rolling(3).rank(method='min')
print(res)
Результат выполнения кода:
0 NaN
1 NaN
2 1.0
3 1.0
4 2.0
dtype: float64
Пример
Давайте вычислим ранги по убыванию в скользящем окне размером 4 с методом max:
import pandas as pd
df = pd.DataFrame({
'a': [5, 4, 3, 2, 1],
'b': [50, 40, 30, 20, 10]
})
res = df['a'].rolling(4).rank(method='max', ascending=False)
print(res)
Результат выполнения кода:
0 NaN
1 NaN
2 NaN
3 4.0
4 4.0
dtype: float64
Пример
Применим метод rank ко всем колонкам DataFrame с окном 3 и методом dense:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 2, 4, 5],
'b': [10, 20, 20, 40, 50]
})
res = df.rolling(3).rank(method='dense')
print(res)
Результат выполнения кода:
a b
0 NaN NaN
1 NaN NaN
2 2.0 2.0
3 2.0 2.0
4 2.0 2.0