pandas中值的唯一从零开始的id

时间:2013-03-13 03:21:44

标签: python pandas

我在DataFrame中有一些带有标识符列的数据。

data = DataFrame({'id' : [50,50,30,10,50,50,30]})

对于每个唯一ID,我想提出一个新的唯一标识符。我希望id从0开始是连续整数。这是我到目前为止所拥有的:

unique = data[['id']].drop_duplicates()   
unique['group'] = np.arange(len(unique))
unique.set_index('id')
data = data.merge(unique, 'inner', on = 'id')

这有效,但看起来有点脏。还有更好的方法吗?

1 个答案:

答案 0 :(得分:8)

这就是pandas.factorize的作用:

data = pd.DataFrame({'id' : [50,50,30,10,50,50,30]})
print pd.factorize(data.id)[0]

输出:

[0 0 1 2 0 0 1]

numpy.unique也可以这样做:

import numpy as np
print np.unique([50,50,30,10,50,50,30], return_inverse=True)[1]

输出:

array([2, 2, 1, 0, 2, 2, 1])

numpy.unique输出的索引按值排序,因此最小值10指向索引0.如果您希望使用factorize得到此结果,请将sort参数设置为{ {1}}:

True