簡體   English   中英

在 python 極坐標上應用百分位數排名,用於 dataframe 上的一組列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM