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

如何聚合Pandas DataFrame并按布尔列求和?批量分组实现

问题:DataFrame多列分组聚合布尔列求和

需求说明

有一个包含100列的DataFrame,需完成以下操作:

  • 对purchase_flag、retention_flag两个布尔列求和
  • 按除这两个flag列外的所有字段分组,实现去重聚合

数据示例

原数据:

user_id | name | product | ...| purchase_flag | retention_flag
123     | John | book    | ...| 0             | 1
123     | John | book    | ...| 1             | 0
....

期望结果:

user_id | name | product | ...| purchase_flag | retention_flag
123     | John | book    | ...| 1             | 1
....

解决方案

你可以通过自动筛选分组列的方式,避免手动列出所有列,以下是两种可行写法:

方法一:列表推导式筛选分组列

# 生成除两个flag列外的所有分组列名
group_cols = [col for col in df.columns if col not in ['purchase_flag', 'retention_flag']]

# 分组并聚合,as_index=False保证分组列不转为索引
result_df = df.groupby(group_cols, as_index=False).agg(
    {'purchase_flag': 'sum', 'retention_flag': 'sum'}
)

方法二:通过drop获取分组列

# 去掉两个flag列后,取剩余列作为分组键
group_cols = df.drop(['purchase_flag', 'retention_flag'], axis=1).columns

# 聚合时也可使用关键字参数写法,更简洁
result_df = df.groupby(group_cols, as_index=False).agg(
    purchase_flag='sum',
    retention_flag='sum'
)

说明

pandas中布尔类型会被自动转换为0(False)和1(True),sum操作可以直接统计每个分组内对应flag为True的次数,最终结果中大于0的值即表示该分组存在至少一行对应flag为True,完全匹配你的期望。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:45:33