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

如何为DataFrame中连续重复的分组值分配递增分类编号

如何为DataFrame中连续重复的分组值分配递增分类编号

嘿,这个需求我太熟了!用Pandas的原生矢量化操作就能完美解决,完全不用写繁琐的for循环,代码简洁还高效,数据量大的时候优势特别明显。

先还原你的示例数据:

import pandas as pd
my_list = ['Apple', 'Apple', 'Orange', 'Orange','Orange','Banana']
grouping = pd.DataFrame(my_list, columns=['List'])

要实现给连续重复的分组分配递增编号,只需要一行代码就能搞定:

# 生成递增的分类编号列
grouping['Value'] = grouping['List'].ne(grouping['List'].shift()).cumsum()

运行后你就能得到预期的结果:

ListValue
0Apple1
1Apple1
2Orange2
3Orange2
4Orange2
5Banana3

我来拆解下这段代码的逻辑:

  • grouping['List'].shift():把List列的所有元素向下偏移一行,这样就能让当前行和上一行的元素做对比
  • ne():是“not equal”的缩写,用来判断当前行和上一行的元素是否不同,不同返回True(对应数值1),相同返回False(对应数值0)
  • cumsum():对前面得到的布尔值序列做累加,每遇到一个True就会让总数加1,刚好实现“换组就递增编号”的效果

对比你之前用for循环的思路,这个方法是Pandas的矢量化操作,避免了逐行遍历的性能开销,数据量越大,速度差距越明显,而且代码可读性也更高。

另外要注意和factorize()区分开:pd.factorize(grouping['List'])[0] + 1会给所有相同的元素分配同一个编号(比如如果你的列表后面又出现Apple,它会继续用1),但你的需求是连续重复的组,所以我们上面的方法才是精准匹配的选择。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 11:09:50