Spec-Zone.ru › Polars

polars.Expr.rank

Expr.rank(
    method: RankMethod = 'average',
    *,
    descending: bool = False,
    seed: int | None = None,
) → Expr

Назначает ранг данным, соответствующим образом обрабатывая совпадающие значения.

движок:В памяти
Параметры:
method{‘average’, ‘min’, ‘max’, ‘dense’, ‘ordinal’, ‘random’}

Метод, используемый для назначения рангов совпадающим элементам. Доступны следующие методы (по умолчанию — ‘average’):

  • ‘average’ : Каждому значению назначается среднее значение рангов, которые были бы назначены всем совпадающим значениям.
  • ‘min’ : Каждому значению назначается минимальное значение рангов, которые были бы назначены всем совпадающим значениям. (Этот метод также называют ранжированием по принципу «соревнования».)
  • ‘max’ : Каждому значению назначается максимальное значение рангов, которые были бы назначены всем совпадающим значениям.
  • ‘dense’ : Как ‘min’, но следующему по величине элементу назначается ранг, следующий непосредственно за рангами совпадающих элементов.
  • ‘ordinal’ : Всем значениям назначается уникальный ранг в соответствии с порядком их появления в Series.
  • ‘random’ : Как ‘ordinal’, но ранг совпадающих значений не зависит от порядка их появления в Series.
descending

Ранжировать в порядке убывания.

seed

Если method="random", использовать это значение в качестве начального значения генератора.

Примечания

Если вы знакомы с SQL, вы можете ожидать, что значения null будут ранжироваться последними. Однако Polars ранжирует только ненулевые значения, а значения null оставляет без изменений.

Примеры

Метод ‘average’:

>>> df = pl.DataFrame({"a": [3, 6, 1, 1, 6]})
>>> df.select(pl.col("a").rank())
shape: (5, 1)
┌─────┐
│ a   │
│ --- │
│ f64 │
╞═════╡
│ 3.0 │
│ 4.5 │
│ 1.5 │
│ 1.5 │
│ 4.5 │
└─────┘

Метод ‘ordinal’:

>>> df = pl.DataFrame({"a": [3, 6, 1, 1, 6]})
>>> df.select(pl.col("a").rank("ordinal"))
shape: (5, 1)
┌─────┐
│ a   │
│ --- │
│ u32 │
╞═════╡
│ 3   │
│ 4   │
│ 1   │
│ 2   │
│ 5   │
└─────┘

Используйте ‘rank’ с ‘over’, чтобы ранжировать значения внутри групп:

>>> df = pl.DataFrame({"a": [1, 1, 2, 2, 2], "b": [6, 7, 5, 14, 11]})
>>> df.with_columns(pl.col("b").rank().over("a").alias("rank"))
shape: (5, 3)
┌─────┬─────┬──────┐
│ a   ┆ b   ┆ rank │
│ --- ┆ --- ┆ ---  │
│ i64 ┆ i64 ┆ f64  │
╞═════╪═════╪══════╡
│ 1   ┆ 6   ┆ 1.0  │
│ 1   ┆ 7   ┆ 2.0  │
│ 2   ┆ 5   ┆ 1.0  │
│ 2   ┆ 14  ┆ 3.0  │
│ 2   ┆ 11  ┆ 2.0  │
└─────┴─────┴──────┘

Разделите на длину или количество ненулевых значений, чтобы вычислить процентильный ранг.

>>> df = pl.DataFrame({"a": [6, 7, None, 14, 11]})
>>> df.with_columns(
...     pct=pl.col("a").rank() / pl.len(),
...     pct_valid=pl.col("a").rank() / pl.count("a"),
... )
shape: (5, 3)
┌──────┬──────┬───────────┐
│ a    ┆ pct  ┆ pct_valid │
│ ---  ┆ ---  ┆ ---       │
│ i64  ┆ f64  ┆ f64       │
╞══════╪══════╪═══════════╡
│ 6    ┆ 0.2  ┆ 0.25      │
│ 7    ┆ 0.4  ┆ 0.5       │
│ null ┆ null ┆ null      │
│ 14   ┆ 0.8  ┆ 1.0       │
│ 11   ┆ 0.6  ┆ 0.75      │
└──────┴──────┴───────────┘

© 2020 Ritchie Vink
© 2022 Polars contributors
Licensed under the MIT License.
https://docs.pola.rs/api/python/stable/reference/expressions/api/polars.Expr.rank.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API