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

如何按首次出现顺序为Pandas多重复行分配对应数值?

问题:按元素首次出现顺序生成编号列

我有如下DataFrame:

import pandas as pd
df = pd.DataFrame({'Col1': ['A', 'A', 'C', 'A', 'C','B','A','B']})

希望生成Col2列,该列不按字母顺序,而是按元素首次出现的顺序分配数值,预期结果如下:

df = pd.DataFrame({'Col1': ['A', 'A', 'C', 'A', 'C','B','A','B'],
                   'Col2': [1, 1, 2, 1, 2, 3, 1, 3]})

我尝试了以下代码:

df['Col2'] = df.groupby(['Col1']).ngroup()

但得到的结果与预期不符,实际输出如下:

Col1Col2
A0
A0
C2
A0
C2
B1
A0
B1

解决方案

方法1:使用pd.factorize()

pd.factorize()会按元素首次出现的顺序生成对应标签,默认从0开始,加1即可得到预期的1、2、3序列:

df['Col2'] = pd.factorize(df['Col1'])[0] + 1

方法2:使用Categorical类型

先提取Col1中元素首次出现的唯一值顺序,再将列转为分类类型并提取编码,最后加1:

# 获取元素首次出现的顺序
unique_order = df['Col1'].unique()
df['Col2'] = pd.Categorical(df['Col1'], categories=unique_order).codes + 1

两种方法都能生成符合预期的Col2列,按A→C→B的首次出现顺序分配1、2、3编号。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:35:24