2016-05-23 9 views
0

は、私は、次のデータフレームを持っていると言う基準に重複を削除:パンダは

>>> import pandas as pd 
>>> 
>>> d=pd.DataFrame() 
>>> 
>>> d['Var1']=['A','A','B','B','C','C','D','E','F'] 
>>> d['Var2']=['A','Z','B','Y','X','C','Q','N','P'] 
>>> d['Value']=[34, 45, 23, 54, 65, 77,100,102,44] 
>>> d 
    Var1 Var2 Value 
0 A A  34 
1 A Z  45 
2 B B  23 
3 B Y  54 
4 C X  65 
5 C C  77 
6 D Q 100 
7 E N 102 
8 F P  44 
>>> 

私は「VAR1」で重複がある場合をドロップしたいが、私は保たれている重複していることを確認します私はこれを行うことができますどのようになど

 Var2 Value 
Var1    
A  A  34 
B  B  23 
C  C  77 
D  Q 100 
E  N 102 
F  P  44 
>>> 

任意の提案:「VAR1」==「var2の」

私の出力データフレームは次のようになり1? groupbyフィルタを使用するのが最善の方法でしょうか?

答えて

1

ここでワンライナーです:

>>> d.loc[~d.Var1[(d.Var1 == d.Var2).argsort()].duplicated('last')] 

    Var1 Var2 Value 
0 A A  34 
2 B B  23 
5 C C  77 
6 D Q 100 
7 E N 102 
8 F P  44 

あなたは(d.set_index('Var1'))したい場合は、その後、あなたが投稿し正確に出力を得るためにVar1にインデックスを設定することができます。それを打破するには

  • d.Var1[(d.Var1 == d.Var2).argsort()]Var1 == Var2が終わり

  • ~d.Var1[(d.Var1 == d.Var2).argsort()].duplicated('last')ある行はVar1がある行に対して真となるように配置されたVar1内の値を持つシリーズです重複しない。重複がある場合は、我々は最後のものを選ぶ

0

私の提案はヴァール2と辞書として価値を創造することです(そうVar1 == Var2が優先されます)。

d['Var1']=['A','A','B','B','C','C','D','E','F'] 
    d['Var2']=['A','Z','B','Y','X','C','Q','N','P'] 
    d['Var2Val'] = {'A':34,'Z':45,'B':23,'Y':54,'X':65,'C':77,'Q':100,'N':102,'P':44} 

その後、私はそれからでも、少なくともこれは最も簡単な方法だろうテーブル

を印刷彼らはVAR2

for x in d['Var1']: 
     if d['Var1'][x] in d['Var2']: 

ある場合は、それらを印刷し、重複することなく、VAR1のためのリストを作成しますちょっとかもしれませんが