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

Python pandas 按A列分组时遇D列新序列中断实现分段groupby聚合

问题根因

你之前直接用['A','D']作为groupby键的写法,会把同一个A值下所有D值相同的行全部聚合,完全忽略D值是否连续。比如A=04547下D=1000000的行分别出现在7-8月、10月24日两个不连续的区间,就会被错误合并成一组,自然和预期结果不符。

实现方案

核心是先给每个A分组内的连续相同D值段生成独立的分段ID,再用A+分段ID作为分组键做聚合即可:

  • 按A列拆分数据,对每个拆分后的子集,逐行判断当前行D值和上一行D值是否不同,每出现一次不同就给分段ID+1,相同则沿用当前分段ID
  • 基于A列和生成的分段ID做分组聚合,按要求取B列首值、C列末值、D列首值即可
可直接运行的代码
# 注意:如果你的A列带前导0,读取数据时请指定dtype={'A': str},避免前导0被自动转成整数丢失
# 生成连续段标记
df['seg_flag'] = df.groupby('A')['D'].apply(lambda x: (x != x.shift()).cumsum()).droplevel(0)

# 聚合得到结果
result = df.groupby(['A', 'seg_flag'], as_index=False).agg(
    B=('B', 'first'),
    C=('C', 'last'),
    D=('D', 'first')
).drop(columns='seg_flag')

运行上述代码后输出的结果和你给出的预期结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:06:22