假设我有一个极坐标数据框,其中有一个浮动的列
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))
)
您可以使用生成器表达式为每个感兴趣的分位数生成极坐标表达式。此外,您可以使用
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 │
└─────┴──────────┴─────────────┴────────────┴─────────────┘