如何使用Pandas的groupby对连续重复行按列求和?
解决Pandas中连续重复行按列求和的问题
核心思路
要实现对连续重复的type行按value列求和,关键是先生成一个「连续分组标识」——给每一段连续相同的type分配唯一组号,再用这个标识分组求和。
分步实现
- 创建示例DataFrame
import pandas as pd data = { 'type': ['profit', 'profit', 'loss', 'profit', 'profit', 'loss', 'loss', 'loss'], 'value': [11, 10, -5, 50, 15, -30, -25, -10] } df = pd.DataFrame(data)
- 生成连续分组标识
通过对比当前行与上一行的type是否不同,累计生成组号:
group_ids = df['type'].ne(df['type'].shift()).cumsum()
这段代码会输出:[1,1,2,3,3,4,4,4],对应每一段连续的type组。
- 分组求和并整理结果
用生成的组号分组,提取每组的type(取第一个即可,同组type一致),对value求和:
result = df.groupby(group_ids).agg( type=('type', 'first'), grand=('value', 'sum') ).reset_index(drop=True)
最终结果
type grand 0 profit 21 1 loss -5 2 profit 65 3 loss -65
对您之前代码的说明
您之前使用cumcount()是统计每组内的行数,换成sum()就能得到每组的求和值。核心区别是:直接按type分组会合并所有相同type的行(不管是否连续),而用「连续分组标识」才能只合并连续重复的行。
内容的提问来源于stack exchange,提问作者Mohamed Abbase
相关产品推荐
相关产品推荐

