2012-09-07 6 views
24

중복 행이있는 DataFrame이 있습니다. 고유 인덱스와 중복이없는 DataFrame을 얻고 싶습니다. 중복 된 값은 무시해도 좋습니다. 이것이 가능한가? groupby에 의해 완료 될까요?팬더 : 고유 한 데이터 프레임

답변

51
In [29]: df.drop_duplicates() 
Out[29]: 
    b c 
1 2 3 
3 4 0 
7 5 9 
+0

이것은 첫 번째 또는 마지막 항목을 취합니다. 따라서 다른 양을 먼저 정렬해야합니다 (운이 좋다면). 또는 어쨌든 복잡한 groupby 논리를 수행해야합니다. – ely

+2

잘못되었습니다. drop_duplicates는 값에 대해서만 작용합니다 (최소한 내 버전에서는). 고유 한 색인을 원할 경우 색인 및 값을 h 제하려면 색인을 재설정하거나 색인을 사용하기 위해 reset_index를 수행해야합니다. 고유 인덱스를 적용하기 위해 groupby 외에도 다른 방법이 있을까요? – mathtick

+1

새로운 변수를 할당하지 않으려면'df.drop_duplicates (inplace = True)'를 사용하십시오. –

10

split-apply-combine 설명서를 읽는 방법을 알아 냈습니다. 데이터 필드 (B가 C)를 효과적으로은 고유 할 벡터와 같은 행의 인덱스 부분을 만들고, 중복 된 곳은 행 인덱스에 의존

df = pandas.DataFrame({'b':[2,2,4,5], 'c': [3,3,0,9]}, index=[1,1,3,7]) 
df_unique = df.groupby(level=0).first() 

df 
    b c 
1 2 3 
1 2 3 
3 4 0 
7 5 9 

df_unique 
    b c 
1 2 3 
3 4 0 
7 5 9 
+0

행에 대한 중복 된 (중복되지). – hobs

+3

중복 된 색인 항목이있는 경우 원하는 답변입니다. – rogueleaderr

+0

MultIndex에서'unstack'을 할 때'ValueError : Index가 중복 된 엔트리를 포함하고 있습니다. 재구성 할 수 없습니다. '라는 메시지가 나타 났지만,이 솔루션은 단지'df_unique = df.groupby (level = [0,1])에서만 작동합니다. first()' – dashesy

관련 문제