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

Joh*_*ier 2 python pandas

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

data = DataFrame({'id' : [50,50,30,10,50,50,30]})
Run Code Online (Sandbox Code Playgroud)

对于每个唯一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')
Run Code Online (Sandbox Code Playgroud)

这有效,但看起来有点脏.有没有更好的办法?

HYR*_*YRY 8

这是做什么的pandas.factorize:

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

输出:

[0 0 1 2 0 0 1]
Run Code Online (Sandbox Code Playgroud)

numpy.unique 也可以这样做:

import numpy as np
print np.unique([50,50,30,10,50,50,30], return_inverse=True)[1]
Run Code Online (Sandbox Code Playgroud)

输出:

array([2, 2, 1, 0, 2, 2, 1])
Run Code Online (Sandbox Code Playgroud)

输出的索引numpy.unique按值排序,因此最小值10指向索引0.如果要通过使用此结果factorize,请将sort参数设置为True:

pandas.factorize(data.id, sort=True)[0]
Run Code Online (Sandbox Code Playgroud)

  • 是.为了重现你的例子,John,只做``data ['group'] = pd.factorize(data.id)[0]``.或者,您可以通过分配给``data [id] = ...``来_replace_旧的ID.(我明白你的问题吗?) (2认同)