我对 Pandas 不是很满意,我认为 Pandas 应该解决我的问题:
我有一个文本文件,其中包含数据(id1id2value1value2value3)

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;

最佳答案

您需要使用 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

关于Python-根据列的最大值删除重复项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42267373/

10-10 17:01