2017-02-16 10 views
2

Я не очень хорошо с пандами, и я думаю, что панды должны решить мою проблему: У меня есть текстовый файл, который содержит данные (id1; id2; value1; value2; value3)Python - Перепад дубликат на основе максимального значения столбца

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; 

в результате, я хочу сохранить строки, которые имеют равную id1, id2, value1 и выше value3. Value2 не имеет значения, но его необходимо сохранить, например.

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

ответ

2

Вам необходимо DataFrameGroupBy.idxmax для индексов максимального значения value3 и Фес выберите 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, а затем groupby с GroupBy.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

Смежные вопросы