2013-03-13 2 views
2

ID 열이있는 DataFrame에 일부 데이터가 있습니다.팬더의 값에 대한 고유 0 기반 ID

data = DataFrame({'id' : [50,50,30,10,50,50,30]}) 

각 고유 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가하는 일입니다

답변

8

:

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)가 factorize를 사용하여 인덱스 0으로 assigend되고, 설정 sort 인수 True에 :

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

간단한 방법이 있나요 원래 데이터 프레임에 새로운 ID를 부여 하시겠습니까? –

+2

예. 당신의 예제 인 John을 재현하기 위해서는''data [ 'group'] = pd.factorize (data.id) [0]''을 사용하십시오. 또는, 대신에''data [id] = ...''에 할당하여 이전 id를 다시 쓸 수도 있습니다. (귀하의 질문을 이해 했습니까?) –

관련 문제