2017-02-16 36 views
2

的最大值我不是熊貓真的很不錯,我覺得熊貓應該解決我的問題: 我有一個文本文件,它包含數據(id1; id2; value1; value2; value3Python的 - 防摔重複基於列

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; 

結果,我想保持線,具有相等id1id2value1和更高value3Value2不重要,但需要保留,例如

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

回答

2

你需要DataFrameGroupBy.idxmaxvalue3和THES最大值的指標選擇DataFrame通過loc

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 

另一種可能的解決方案是sort_values通過value3列,然後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