如何在Polars DataFrame中按分组计算正值行的占比
如何在Polars DataFrame中按分组计算正值行的占比
嘿,这个需求用Polars的分组聚合功能就能轻松搞定,我给你一步步说明:
首先我们可以利用布尔值的特性——在数值计算中True会被当作1、False会被当作0,所以只要对每个分组的正值判断结果求平均值,就能直接得到我们要的占比啦。
直接上完整可运行的代码:
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], } ) # 核心计算逻辑 result_df = df.group_by("group").agg( positive_percent=pl.col("value").gt(0).mean() ) print(result_df)
代码拆解:
- 分组操作:
group_by("group")将原始数据按group列的不同取值(A、B)拆分成独立的分组 - 正值校验:
pl.col("value").gt(0)遍历每个分组内的value元素,判断是否为正值,生成由True/False组成的序列 - 计算占比:
.mean()对布尔序列求平均值——因为布尔值在计算时会自动转换为1(True)和0(False),平均值恰好等于「组内正值数量/组内总数量」,直接得到我们需要的占比数值
运行这段代码后,输出结果完全符合你的预期:
┌───────┬──────────────────┐ │ group ┆ positive_percent │ │ --- ┆ --- │ │ str ┆ f64 │ ╞═══════╪══════════════════╡ │ A ┆ 0.6 │ │ B ┆ 0.8 │ └───────┴──────────────────┘
你看,分组A的60%、分组B的80%都精准计算出来啦!
备注:内容来源于stack exchange,提问作者Andi
相关产品推荐
相关产品推荐

