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

Pandas中为唯一列组合分配递增唯一编号的实现方法

为Pandas DataFrame的唯一列组合分配递增唯一编号

针对你提出的需求,这里有两种简洁高效的实现方式,直接来看代码和说明:

方法一:使用groupby().ngroup()(推荐)

这个方法最直观,专门针对分组场景,一步就能完成编号分配:

import pandas as pd

# 初始化你的DataFrame
df = pd.DataFrame({'A':['A','A','A','B','B','B','B'], 'B':['a','a','b','a','a','a','a']})

# 按A和B列分组,为每组分配递增编号(默认从0开始,+1改成从1开始)
df['C'] = df.groupby(['A', 'B']).ngroup() + 1

print(df)

方法二:使用pd.factorize()

如果需要更灵活地处理唯一值组合,可以用factorize,它能将任意唯一序列转换成整数编码:

import pandas as pd

df = pd.DataFrame({'A':['A','A','A','B','B','B','B'], 'B':['a','a','b','a','a','a','a']})

# 将A、B两列合并为元组序列,再进行factorize编码,最后+1调整起始值
df['C'] = pd.factorize(df[['A', 'B']].apply(tuple, axis=1))[0] + 1

print(df)

输出结果

两种方法都会得到你期望的结果:

ABC
0Aa1
1Aa1
2Ab2
3Ba3
4Ba3
5Ba3
6Ba3

小说明

  • ngroup()默认从0开始编号,所以我们加1让编号从1开始,如果你不需要这个调整,可以去掉+1。
  • factorize()返回的是一个元组,第一个元素是编码数组,第二个是唯一值的索引,所以我们取[0]来获取编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:12:19