2014-04-07 3 views
16

나는 다음은 분명한 이유가 작동하지 않는 dataframe에 중복 된 인덱스를 삭제하려면 :빠른 방법

myDF.drop_duplicates(cols=index) 

myDF.drop_duplicates(cols='index') 

가 보인다 열이 나는 인덱스를 삭제하려면 내가해야 할 '인덱스'

이름 :

myDF['index'] = myDF.index 
myDF= myDF.drop_duplicates(cols='index') 
myDF.set_index = myDF['index'] 
myDF= myDF.drop('index', axis =1) 

보다 효율적인 방법이 있습니까?

+1

http://stackoverflow.com/questions/13035764/remove-rows-with-duplicate-indices-pandas-dataframe-and- : 그냥 중복 인덱스를 가진 것으로 표시되지 않은 그 행을 선택 timeseries –

+1

@ Paul : Luciano의 질문에 대한 대답은 내 질문과 동일합니다. – RukTech

답변

26

: DF.groupby(DF.index).first()

+0

이 방법이 마음에 듭니다. 고맙습니다! @CT – RukTech

+0

@CT Zhu -이 방법을 사용하면 견인 용 칼럼을 하나의 기둥으로 결합합니다. 나는 그걸 모으고 싶지 않습니다. 주위에 방법이 있습니까? – liv2hak

+0

@ liv2hak, 최소한의 예제 데이터 세트로 새로운 질문을하십시오. –

5

당신은 고유 한 값의 인덱스를 얻기 위해 numpy.unique를 사용하는 인덱스를 얻을 수 iloc를 사용할 수 있습니다 간단하게

>>> df 
     val 
A 0.021372 
B 1.229482 
D -1.571025 
D -0.110083 
C 0.547076 
B -0.824754 
A -1.378705 
B -0.234095 
C -1.559653 
B -0.531421 

[10 rows x 1 columns] 

>>> idx = np.unique(df.index, return_index=True)[1] 
>>> df.iloc[idx] 
     val 
A 0.021372 
B 1.229482 
C 0.547076 
D -1.571025 

[4 rows x 1 columns] 
+2

df.ix를 사용하면 훨씬 빠릅니다 ..... [idx] – baconwichsand

16

'중복'방법은 dataframes과 시리즈 작동합니다.

df[~df.index.duplicated()] 
+0

이렇게하면 모든 복제본이 삭제됩니까? –

+1

조사한 테스트 케이스 중 가장 빠른 방법입니다. http://stackoverflow.com/questions/13035764/remove-rows-with-duplicate-indices-pandas-dataframe-and-timeseries/34297689#34297689 'df [~ df.index.duplicated (keep = 'first)]'를 사용하여 허용 된 답변의 동작을 정확하게 재현 할 수도 있습니다. – n8yoder