将满足条件的数据帧行保留到按以下分组的同一数据帧的每组中

keep dataframe rows meeting a condition into each group of the same dataframe grouped by

我有以下数据框。

    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 中。 最后输出原始dataframe,将所有不满足之前规则的行丢弃。

获得此结果的更好方法是什么?谢谢

转了一圈,我也发现了this solution based on apply method

您可以使用

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