按0分隔行对Python DataFrame分组求和的实现方法
解决按0分隔行求和的Pandas DataFrame问题
嘿,这个需求我之前处理过,用Pandas的分组功能就能完美解决!咱们一步步来实现你要的效果:
首先,先把原始数据构建出来(方便复现):
import pandas as pd data = pd.DataFrame({'A':['a','b','c','d','e','f','g','h','i'],'B':[1,2,0,3,2,0,0,3,4]})
核心思路
我们需要把0作为分隔符,将连续的非0行划分为一组,然后对每组做两个操作:
- 取组内
A列的第一个元素作为新列AA - 对组内
B列求和得到新列BB
最后过滤掉那些全是0的无效分组。
完整实现代码
# 生成分组标识:每次遇到B列的0,分组ID就递增,非0行保持当前分组ID data['group'] = data['B'].eq(0).cumsum() # 分组聚合+过滤无效组 data2 = data.groupby('group').agg( AA=('A', 'first'), # 取每组第一个A值 BB=('B', 'sum') # 对每组B值求和 ).query('BB != 0') # 去掉求和为0的组(纯0的分组) # 重置索引,让结果更整洁 data2 = data2.reset_index(drop=True) # 查看结果 print(data2)
运行结果
输出的data2就是你想要的目标DataFrame:
AA BB 0 a 3 1 d 5 2 h 7
代码解释
data['B'].eq(0).cumsum():这行是关键!它会把每个0的位置标记为True,然后累加得到分组ID,这样所有处于两个0之间的非0行都会被分到同一个组里。groupby('group').agg(...):按分组ID聚合,指定每个新列的生成规则。.query('BB != 0'):过滤掉那些只有0的分组(比如原始数据里的两个连续0,对应的分组求和为0,我们不需要保留)。
内容的提问来源于stack exchange,提问作者user7544575
相关产品推荐
相关产品推荐

