我在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')
这有效,但看起来有点脏。还有更好的方法吗?
答案 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