我的数据框是这样的:
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
有更简单的方法吗?
答案 0 :(得分:2)
您可以使用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
答案 1 :(得分:1)
我认为需要将列设置为ordered categorical
,然后转换为cat.codes
:
a = [12345, 0, 43241]
df['c'] = df.a.astype('category', ordered=True, categories=a).cat.codes
print (df)
a b c
0 0 123 1
1 0 321 1
2 0 456 1
3 12345 1234 0
4 43241 132 2
5 0 2134 1
6 12345 6543 0
7 43241 987 2