我的问题是,如果在大熊猫的数据框中,我有一个这样的列, ['black'。'black','red','orange','red']。我需要将此数组转换为[1,1,2,3,2]
如何在python中进行此操作(在numpy或pandas中是否有任何标准操作)
答案 0 :(得分:1)
pandas有一个map
函数用于执行此操作,因此您只需执行以下操作:
In [71]:
df = pd.DataFrame({'col':['black','black','red','orange','red']})
df
Out[71]:
col
0 black
1 black
2 red
3 orange
4 red
[5 rows x 1 columns]
In [74]:
col_map = {'black':1,'red':2,'orange':3}
df['col_id'] = df['col'].map(col_map)
df
Out[74]:
col col_id
0 black 1
1 black 1
2 red 2
3 orange 3
4 red 2
[5 rows x 2 columns]
这会分配一个新列' col_id'到你的数据帧并将字符串值映射到它们的int对应物。
答案 1 :(得分:0)
Factor
课程可以帮助您。 This answer似乎是关于你正在寻找的东西。
答案 2 :(得分:0)
使用OrderedDict保留列表顺序,但删除重复项:
>>> l = ['black', 'black','red','orange','red']
>>> from collections import OrderedDict
>>> [OrderedDict.fromkeys(l).keys().index(i) + 1 for i in l]
[1, 1, 2, 3, 2]
答案 3 :(得分:0)
numpy的答案是带有return_inverse
的np.unique>>> np.unique(['black','black','red','orange','red'], return_inverse=True)
(array(['black', 'orange', 'red'],
dtype='|S6'), array([0, 0, 2, 1, 2]))
这将整数分配给按字母顺序排序的唯一内容。