DataFrame.rank() / Series.rank()

Метод rank() присваивает каждому элементу его ранг в выборке. По умолчанию — средний ранг для одинаковых значений.

Сигнатура

DataFrame.rank(axis=0, method="average", numeric_only=False,
               na_option="keep", ascending=True, pct=False)

Параметры

  • method — способ разрешения связей: "average", "min", "max", "first", "dense".

  • ascending — по возрастанию (True) или убыванию.

  • pct — вернуть ранги в долях (0..1).

  • na_option — что делать с NaN: "keep", "top", "bottom".

Возвращаемое значение

Series или DataFrame с рангами того же размера.

Примеры

Пример 1. Базовое ранжирование

import pandas as pd

s = pd.Series([10, 30, 20, 40])
print(s.rank())
0    1.0
1    3.0
2    2.0
3    4.0
dtype: float64

Пример 2. Связи: method=»min» vs «dense»

import pandas as pd

s = pd.Series([10, 20, 20, 30])
print("min:")
print(s.rank(method="min"))
print("dense:")
print(s.rank(method="dense"))
min:
0    1.0
1    2.0
2    2.0
3    4.0
dtype: float64
dense:
0    1.0
1    2.0
2    2.0
3    3.0
dtype: float64

Пример 3. Рейтинг роботов по очкам

import pandas as pd

df = pd.DataFrame({
    "robot": ["P1", "P2", "P3", "P4"],
    "score": [80, 95, 70, 85],
})
df["rank"] = df["score"].rank(ascending=False, method="min").astype(int)
print(df)
  robot  score  rank
0    P1     80     3
1    P2     95     1
2    P3     70     4
3    P4     85     2

Пример 4. Процентильные ранги

import pandas as pd

s = pd.Series([10, 20, 30, 40, 50])
print(s.rank(pct=True))
0    0.2
1    0.4
2    0.6
3    0.8
4    1.0
dtype: float64

Пример 5. Ранги по столбцам DataFrame

import pandas as pd

df = pd.DataFrame({"a": [3, 1, 2], "b": [10, 30, 20]})
print(df.rank())
     a    b
0  3.0  1.0
1  1.0  3.0
2  2.0  2.0

См. также

Примечание

Лицензия и источники

Техническое описание функции адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Примеры и пояснения — © AlashEd Wiki.