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

在Pandas DataFrame中实现类Excel的连续相同值序列分组编号(新增group_id列)

Pandas实现连续相同值序列分组(group_id递增)

这是个很典型的连续值分组需求,在Pandas里我们可以用向量化操作来高效实现,完全不需要写循环或者自定义函数,代码简洁又性能拉满。

步骤详解

首先先构造你给出的示例DataFrame:

import pandas as pd

df = pd.DataFrame({'var1': ['a','a','e','d','d','d','a','a','b','b']}, index=range(1,11))

然后一行代码就能生成需要的group_id列:

df['group_id'] = (df['var1'] != df['var1'].shift()).cumsum() - 1

让我们拆解一下这段代码的逻辑:

  • df['var1'].shift():把var1列整体向下偏移一行,第一行会变成NaN
  • df['var1'] != df['var1'].shift():生成一个布尔序列,当当前行和上一行的var1值不同时返回True,否则返回False(第一行因为和NaN比较,结果是True)
  • .cumsum():对布尔序列做累加(True等价于1,False等价于0),这样每次遇到新的连续序列时,累加值就会+1,得到从1开始的分组编号
  • 最后-1:把分组编号调整为从0开始,和你期望的结果完全匹配

验证结果

运行代码后,输出df就能得到你想要的结果:

var1  group_id
1      a         0
2      a         0
3      e         1
4      d         2
5      d         2
6      d         2
7      a         3
8      a         3
9      b         4
10     b         4

为什么这是最优方法?

这个方案完全利用了Pandas的向量化运算,避免了逐行处理的低效操作(比如apply或者循环),在处理大数据集时性能优势会非常明显,是Pandas社区处理这类连续分组问题的标准解法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:57:47