以极坐标作为数据框的系列的分位数

问题描述 投票:0回答:1

假设我有一个极坐标数据框,其中有一个浮动的列

outcome

我怎样才能得到该结果的分位数作为数据框,即我想得到类似的东西:

| quantile | value        |
|----------|--------------|
| 0.1      | <some value> |
| 0.2      | <some value> |
| 0.3      | <some value> |
| ...      |              |
| ...      |              |

注意,我最感兴趣的是没有 group by 的解决方案,但有一个 group by,其中组由一些附加变量标识,在下面的示例中

a
也很有趣。

要偏离的最小示例:

df = pl.from_pandas(pd.DataFrame({
    'a': [2, 2, 2, 1, 2, 1]
})).with_columns(outcome=pl.lit(np.random.rand(6))
)
python aggregation python-polars quantile
1个回答
0
投票

您可以使用生成器表达式为每个感兴趣的分位数生成极坐标表达式。此外,您可以使用

pl.Expr.over
作为 窗口函数 分别计算列 a 定义的每个组的分位数。

QUANTILES = [0.05, 0.5, 0.95]

df.with_columns(
    pl.col("value").quantile(q).over("a").name.suffix(f"_q{q}")
    for q in QUANTILES
)
shape: (6, 5)
┌─────┬──────────┬─────────────┬────────────┬─────────────┐
│ a   ┆ value    ┆ value_q0.05 ┆ value_q0.5 ┆ value_q0.95 │
│ --- ┆ ---      ┆ ---         ┆ ---        ┆ ---         │
│ i64 ┆ f64      ┆ f64         ┆ f64        ┆ f64         │
╞═════╪══════════╪═════════════╪════════════╪═════════════╡
│ 2   ┆ 0.888913 ┆ 0.90896     ┆ 0.90896    ┆ 0.90896     │
│ 2   ┆ 0.093151 ┆ 0.90896     ┆ 0.90896    ┆ 0.90896     │
│ 2   ┆ 0.982695 ┆ 0.90896     ┆ 0.90896    ┆ 0.90896     │
│ 1   ┆ 0.2693   ┆ 0.356496    ┆ 0.356496   ┆ 0.356496    │
│ 2   ┆ 0.90896  ┆ 0.90896     ┆ 0.90896    ┆ 0.90896     │
│ 1   ┆ 0.356496 ┆ 0.356496    ┆ 0.356496   ┆ 0.356496    │
└─────┴──────────┴─────────────┴────────────┴─────────────┘
© www.soinside.com 2019 - 2024. All rights reserved.