如何在Python Pandas中按ID前8位分组后对每组求和筛选?
解决分组内求和范围限定问题
你的问题出在循环里始终引用整个newDF的Hours_Calc列,没有将计算范围限定到当前分组。LeftGroup.groups仅返回分组的键集合,不会自动过滤数据到对应分组。
方法1:使用get_group获取当前分组数据
LeftGroup = newDF.groupby('ID_Left_8') for g in LeftGroup.groups: # 通过分组键获取对应分组的子DataFrame group_data = LeftGroup.get_group(g) # 统计当前分组内Hours_Calc大于0的数量 if (group_data['Hours_Calc'] > 0).sum() > 0: print(g)
方法2:直接遍历分组对象(更高效)
无需单独遍历groups键,直接遍历groupby对象会返回每个分组的(键, 子DataFrame)元组,代码更简洁:
LeftGroup = newDF.groupby('ID_Left_8') for g, group_data in LeftGroup: if (group_data['Hours_Calc'] > 0).sum() > 0: print(g)
补充说明
(group_data['Hours_Calc'] > 0)生成布尔Series,.sum()会统计其中True的数量(即大于0的值的个数)- 若需求是对大于0的数值本身求和而非统计个数,可修改为
group_data[group_data['Hours_Calc'] > 0]['Hours_Calc'].sum() > 0
内容的提问来源于stack exchange,提问作者PandaSmanda18
相关产品推荐
相关产品推荐

