Pandas如何按id分组聚合多列布尔条件判断结果
pandas 按id分组聚合布尔列实现方案
直接按以下两步操作即可得到目标结果:
- 生成三个布尔判断列
用pandas的列级向量化运算生成判断列,性能远高于逐行遍历:
import pandas as pd # 构造原始示例数据 df = pd.DataFrame({ 'id': [1, 1, 2, 3, 3], 'A': [1, 5, 6, 1, 4], 'B': [1, 7, 9, 5, 6], 'C': [1, 2, 3, 4, 2] }) # 新增三个布尔判断列 df['a_greater_than_b'] = df['A'] > df['B'] df['b_greater_than_c'] = df['B'] > df['C'] df['c_greater_than_a'] = df['C'] > df['A']
- 按id分组聚合
从给出的期望输出可以看出,聚合规则为:同一id下,某判断列所有行结果都为True时,聚合结果才为True,只要存在一行结果为False,最终返回False。直接调用groupby配合all()聚合即可:
res = df.groupby('id', as_index=False)[ ['a_greater_than_b', 'b_greater_than_c', 'c_greater_than_a'] ].all()
执行后打印res输出完全匹配目标结果:
id a_greater_than_b b_greater_than_c c_greater_than_a 0 1 False False False 1 2 False True False 2 3 False True False
如果你需要的聚合规则是「同id下只要有一行满足判断就返回True」,把代码里的
.all()替换为.any()即可。
内容的提问来源于stack exchange,提问作者l a s
相关产品推荐
相关产品推荐

