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)
输出结果
两种方法都会得到你期望的结果:
| A | B | C | |
|---|---|---|---|
| 0 | A | a | 1 |
| 1 | A | a | 1 |
| 2 | A | b | 2 |
| 3 | B | a | 3 |
| 4 | B | a | 3 |
| 5 | B | a | 3 |
| 6 | B | a | 3 |
小说明
ngroup()默认从0开始编号,所以我们加1让编号从1开始,如果你不需要这个调整,可以去掉+1。factorize()返回的是一个元组,第一个元素是编码数组,第二个是唯一值的索引,所以我们取[0]来获取编码。
内容的提问来源于stack exchange,提问作者manu madhavan
相关产品推荐
相关产品推荐

