[英]Apply rank with percentile, on python polars, for a set of columns on a dataframe
df = pl.DataFrame(
{
"era": ["01", "01", "02", "02", "03", "03"],
"pred1": [1, 2, 3, 4, 5,6],
"pred2": [2,4,5,6,7,8],
"pred3": [3,5,6,8,9,1],
"something_else": [5,4,3,67,5,4],
}
)
pred_cols = ["pred1", "pred2", "pred3"]
ERA_COL = "era"
我正在嘗試在 Polars 上執行相當於 pandas 排名百分位的操作。 Polars 的rank
function 缺少 Pandas 擁有的pct
標志。
我在這里看了另一個問題: how to replace pandas df.rank(axis=1) with polars
但是問題的結果(並將其應用於我的代碼)有些不對勁。 計算 Pandas 中的排名百分比,給了我一個浮點數,Polars 提供的示例給了我一個數組,而不是浮點數,所以在這個例子中計算了一些不同的東西。
例如,Pandas 代碼是這樣的:
df[list(pred_cols)] = df.groupby(ERA_COL, group_keys=False).apply(
lambda d: d[list(pred_cols)].rank(pct=True)
)
您可以將上一個問題中的.rank() /.count()
.over()
.over() 結合使用
>>> df.select(
... (pl.col(pred_cols).rank() / pl.col(pred_cols).count())
... .over(ERA_COL)
... )
shape: (6, 3)
┌───────┬───────┬───────┐
│ pred1 | pred2 | pred3 │
│ --- | --- | --- │
│ f64 | f64 | f64 │
╞═══════╪═══════╪═══════╡
│ 0.5 | 0.5 | 0.5 │
├───────┼───────┼───────┤
│ 1.0 | 1.0 | 1.0 │
├───────┼───────┼───────┤
│ 0.5 | 0.5 | 0.5 │
├───────┼───────┼───────┤
│ 1.0 | 1.0 | 1.0 │
├───────┼───────┼───────┤
│ 0.5 | 0.5 | 1.0 │
├───────┼───────┼───────┤
│ 1.0 | 1.0 | 0.5 │
└─//────┴─//────┴─//────┘
.with_columns()
來“替換”原始值。
>>> df.with_columns(
... (pl.col(pred_cols).rank() / pl.col(pred_cols).count())
... .over(ERA_COL)
... )
shape: (6, 5)
┌─────┬───────┬───────┬───────┬────────────────┐
│ era | pred1 | pred2 | pred3 | something_else │
│ --- | --- | --- | --- | --- │
│ str | f64 | f64 | f64 | i64 │
╞═════╪═══════╪═══════╪═══════╪════════════════╡
│ 01 | 0.5 | 0.5 | 0.5 | 5 │
├─────┼───────┼───────┼───────┼────────────────┤
│ 01 | 1.0 | 1.0 | 1.0 | 4 │
├─────┼───────┼───────┼───────┼────────────────┤
│ 02 | 0.5 | 0.5 | 0.5 | 3 │
├─────┼───────┼───────┼───────┼────────────────┤
│ 02 | 1.0 | 1.0 | 1.0 | 67 │
├─────┼───────┼───────┼───────┼────────────────┤
│ 03 | 0.5 | 0.5 | 1.0 | 5 │
├─────┼───────┼───────┼───────┼────────────────┤
│ 03 | 1.0 | 1.0 | 0.5 | 4 │
└─//──┴─//────┴─//────┴─//────┴─//─────────────┘
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.