polars.Expr.rank
-
Назначает ранг данным, соответствующим образом обрабатывая совпадающие значения.
- Параметры:
-
-
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 │ └──────┴──────┴───────────┘
Expr.rank(
method: RankMethod = 'average',
*,
descending: bool = False,
seed: int | None = None,
) → Expr
© 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