value
我需要计算按列分组的列中正值的百分比group
。
import polars as pl
df = pl.DataFrame(
{
"group": ["A", "A", "A", "A", "A", "B", "B", "B", "B", "B"],
"value": [2, -1, 3, 1, -2, 1, 2, -1, 3, 2],
}
)
shape: (10, 2)
┌───────┬───────┐
│ group ┆ value │
│ --- ┆ --- │
│ str ┆ i64 │
╞═══════╪═══════╡
│ A ┆ 2 │
│ A ┆ -1 │
│ A ┆ 3 │
│ A ┆ 1 │
│ A ┆ -2 │
│ B ┆ 1 │
│ B ┆ 2 │
│ B ┆ -1 │
│ B ┆ 3 │
│ B ┆ 2 │
└───────┴───────┘
组中A
5 个正值中有 3 个(60%),而列中B
5 个正值中有 4 个(80%)。
这是预期的数据框。
┌────────┬──────────────────┐
│ group ┆ positive_percent │
│ --- ┆ --- │
│ str ┆ f64 │
╞════════╪══════════════════╡
│ A ┆ 0.6 │
│ B ┆ 0.8 │
└────────┴──────────────────┘
您可以使用自定义
group_by.agg
的Expr.ge
和。这会根据符号Expr.mean
将值转换为False
/ ,然后通过取 来计算 的比例:True
True
mean
输出:
中间体:
pl.DataFrame.group_by()
按数据分组。.GroupBy.agg()
汇总数据。本质上,您想将您的
value
列转换True
为1
正数/False
或0
负数,然后计算百分比。或者您可以过滤掉所有条件不成立的行: