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

pandas使用groupby+apply调用cumsum时输出结果不符合预期如何解决?

问题原因分析
  • 你现有的代码执行后返回的是单独的分组计算结果表,包含country、原行索引列level_1、计算得到的分组序号列三个字段,没有和原始DataFrame进行关联,自然和你想要的「给原表追加连续分组序号列」的预期不符。
  • pandas 0.25.3版本中groupby.apply返回的序列默认保留原始行索引,你不需要额外执行reset_index,直接赋值给原DataFrame的新列即可自动按索引对齐。
正确实现代码

方案1:直接赋值新增列(最简洁)

import pandas as pd

# 你的原始数据
data = {'process': ['buying','selling','searhicng','repairing', 'preparing', 'selling','buying', 'searching', 'selling','searching'],
        'type': ['in_progress','in_progress','end','in_progress', 'end', 'in_progress','in_progress', 'end', 'in_progress','end'],
        'country': ['usa','usa', 'usa','ghana', 'ghana','ghana','ghana', 'ghana', 'albania','albania'],
        'id': ['022','022','022', '011','011', '011','011', '011', '6','6'],
        'created': ['2021-07-01','2021-07-02','2021-07-03','2021-07-04','2021-07-05','2021-07-06','2021-07-07','2021-07-08','2021-07-09','2021-07-10']        
}
df = pd.DataFrame(data, columns = ['process','type','country', 'id','created'])

# 新增连续分组序号列
df['group_num'] = df.groupby('country')['type'].apply(lambda x: (x != x.shift()).cumsum())

方案2:单独计算结果后合并

如果你需要单独先生成分组结果表再和原表合并,可以修改原有代码如下:

# 生成分组结果
group_result = df.groupby('country').apply(lambda x:(x['type']!=x['type'].shift()).cumsum()).reset_index(name='group_num')
# 按索引合并到原表
df = df.merge(group_result, left_index=True, right_on='level_1').drop('level_1', axis=1)
输出结果验证

以country=ghana的分组为例,得到的group_num序列为[1,2,3,3,4],完全符合连续type相同归为同一组的预期:

typegroup_num
in_progress1
end2
in_progress3
in_progress3
end4

内容的提问来源于stack exchange,提问作者user15920209

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:27:03