[英]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.