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

按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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:57:14