我的数据框是这样的:

a      b
0      123
0      321
0      456
12345  1234
43241  132
0      2134
12345  6543
43241  987
....


我需要根据列表在第三列中设置值(编辑:a不一定要排序):

a     0     12345 43241 ....
c     0     1     2     ....


所以它应该成为

a      b     c
0      123   0
0      321   0
0      456   0
12345  1234  1
43241  132   2
0      2134  0
12345  6543  1
43241  987   2
....


目前,我正在按周期执行此操作:

a=data['a'].unique().tolist()
c=list(range(len(a)))
d=dict(zip(c,a))
df['c']=0
for i in d:
    df.loc[df['a']==d[i],'c']=i


有更简单的方法吗?

最佳答案

您可以使用pandas.factorize

df['c'] = pd.factorize(df['a'])[0]

print(df)

       a     b  c
0      0   123  0
1      0   321  0
2      0   456  0
3  12345  1234  1
4  43241   132  2
5      0  2134  0
6  12345  6543  1
7  43241   987  2

10-04 15:57