2012-09-07 13 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は値に対してのみ動作します(少なくとも私のバージョンでは)。インデックスと値を削除する場合は、reset_indexを指定する必要があります。ユニークなインデックスを作成する場合は、インデックスを使用するだけです。ユニークなインデックスを適用するためにgroupbyの他に別の方法があるのでしょうか? – mathtick

+1

新しい変数を割り当てたくない場合は 'df.drop_duplicates(inplace = True)'を使います。 –

10

split-apply-combineドキュメントの例を読むと、それを行う方法がわかります。

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

これは、行インデックスはデータフィールド(B、C)を効果的にあなたがユニークになりたいのベクターとして、あなたの行のインデックス部分を作り、重複している(重複しない行に対して複製さに依存しています)。 – hobs

+3

インデックスエントリが重複している場合は、これが目的の答えです。 – rogueleaderr

+0

MultIndexで 'unstack'を実行したときに' ValueError:Indexが重複するエントリを含んでいて、再形成できません 'というメッセージが表示されましたが、このソリューションは 'df_unique = df.groupby(level = [0,1]) first() ' – dashesy