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

如何通过Pandas GroupBy计算布尔Flag为True占比及指定字段分组求和

实现方案

你可以使用Pandas的groupby结合agg方法完成多列不同规则的分组聚合,完整代码如下:

import pandas as pd

# 构造测试数据集
df = pd.DataFrame({
    'Id': [1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 4, 4, 4, 4],
    'Session':[1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 1, 1, 2, 3, 4],
    'Flag': [1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1],
    'toSum': [2, 4, 5, 6, 3, 0, 1, 4, 6, 2, 4, 2, 1, 5, 10]
})

# 按Id分组聚合
res = df.groupby('Id', as_index=False).agg(
    Flag_pert=('Flag', lambda x: round(x.mean() * 100, 2)),
    toSum=('toSum', 'sum')
).rename(columns={'Flag_pert': 'Flag %'})

# 输出结果
print(res)

运行后输出结果和预期完全一致:

Id  Flag %  toSum
0   1   57.14     21
1   2   33.33     12
2   3  100.00      4
3   4   50.00     18
逻辑说明
  • groupby('Id', as_index=False):指定按Id列分组,同时设置as_index=False避免Id被转为索引,保留为结果的普通列
  • agg方法可以同时为不同列指定不同的聚合规则:
    • 对Flag列:1代表True、0代表False,直接计算列均值再乘以100即可得到True值的占比,用round保留2位小数
    • 对toSum列:直接使用sum规则计算分组总和
  • 最后用rename方法将百分比列名修改为需要的Flag %

内容的提问来源于stack exchange,提问作者ChrisOram

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:54:02