我有以下数据框。
c1 c2 v1 v2
0 a a 1 2
1 a a 2 3
2 b a 3 1
3 b a 4 5
5 c d 5 0
我希望得到以下输出。
c1 c2 v1 v2
0 a a 2 3
1 b a 4 5
2 c d 5 0
规则。第一组数据帧由c1,c2组成。然后进入每个组,在第v2列中保留具有最大值的行。 最后,输出原始数据帧,其中所有行都不满足先前删除的规则。
获得此结果的更好方法是什么?感谢。
四处走动,我也找到了this solution based on apply method
答案 0 :(得分:1)
您可以使用groupby-transform
to generate a boolean selection mask:
grouped = df.groupby(['c1', 'c2'])
mask = grouped['v2'].transform(lambda x: x == x.max()).astype(bool)
df.loc[mask].reset_index(drop=True)
产量
c1 c2 v1 v2
0 a a 2 3
1 b a 4 5
2 c d 5 0