保持每组的最大值,包括重复

u23*_*u23 2 python pandas

假设我有一个这样的数据框:

    a   b   c
0   x1  y1  9
1   x1  y2  9
2   x1  y3  4
3   x2  y4  2
4   x2  y5  10
5   x2  y6  5
6   x3  y7  6
7   x3  y8  4
8   x3  y9  8
9   x4  y10 11
10  x4  y11 11
11  x4  y12 11
Run Code Online (Sandbox Code Playgroud)

我首先想做一个分组排序的列c(按column分组a),然后我想保留每个组中具有最高 column 值的所有行c。所以输出将如下所示:

    a   b   c
0   x1  y1  9
1   x1  y2  9
4   x2  y5  10
8   x3  y9  8
9   x4  y10 11
10  x4  y11 11
11  x4  y12 11
Run Code Online (Sandbox Code Playgroud)

是否有一种干净的方法可以不使用任何循环等?

yat*_*atu 5

您可以groupbya并找到max每个组,然后merge返回结果数据框以保留匹配的行:

df.merge(df.groupby('a').c.max())

    a    b   c
0  x1   y1   9
1  x1   y2   9
2  x2   y5  10
3  x3   y9   8
4  x4  y10  11
5  x4  y11  11
6  x4  y12  11
Run Code Online (Sandbox Code Playgroud)

  • 又好又短.. +1。 (2认同)