我在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)
这有效,但看起来有点脏.有没有更好的办法?
这是做什么的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)
| 归档时间: |
|
| 查看次数: |
1279 次 |
| 最近记录: |