2017-02-16 4 views
2

の最大値に基づいて重複私はパンダと本当に良いではない、と私はパンダは私の問題を解決すべきだと思う: 私はデータ(id1を含むテキストファイルを、持っている; id2; value1; value2。同じid1id2value1を持って パイソン - ドロップ列

1;2;30;40;20.3; 
1;2;30;42;26.2; 
3;5;12;55;10.7; 
3;5;12;23;8.7; 
3;5;12;33;11.2; 
24;12;1;553;1.1; 
24;12;1;23;1.9; 

その結果、私はラインを維持したい)

value3、および高い value3Value2は重要ではありませんが、保存する必要があります。

1;2;30;42;26.2; 
3;5;12;33;11.2; 
24;12;1;23;1.9; 

答えて

2

あなたが選択value3とTHESの最大値のインデックスにDataFrameGroupBy.idxmaxが必要DataFramelocによって:

print (df.groupby(['id1','id2','value1']).value3.idxmax()) 
id1 id2 value1 
1 2 30  1 
3 5 12  4 
24 12 1   6 
Name: value3, dtype: int64 

df = df.loc[df.groupby(['id1','id2','value1']).value3.idxmax()] 
print (df) 
    id1 id2 value1 value2 value3 a 
1 1 2  30  42 26.2 NaN 
4 3 5  12  33 11.2 NaN 
6 24 12  1  23  1.9 NaN 

別の可能な解決策は、列value3によってsort_values、その後groupbyGroupBy.firstである:

df = df.sort_values('value3', ascending=False) 
     .groupby(['id1','id2','value1'], sort=False) 
     .first() 
     .reset_index() 
print (df) 
    id1 id2 value1 value2 value3 a 
0 1 2  30  42 26.2 NaN 
1 3 5  12  33 11.2 NaN 
2 24 12  1  23  1.9 NaN 
+0

は素晴らしい作品です!ありがとう – krizz