簡體   English   中英

pandas中值的唯一從零開始的id

[英]Unique zero-based id for values in 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')

這有效,但看起來有點臟。 有沒有更好的辦法?

這就是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參數設置為True

pandas.factorize(data.id, sort=True)[0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM