首页 > 解决方案 > Pandas:根据列表设置值

问题描述

我的数据框是这样的:

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

有没有更简单的方法来做到这一点?

标签: pythonpandas

解决方案


您可以使用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

推荐阅读