You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 17:59:33