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

2024-06-24 13:36:43 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有这样一个数据帧:

    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

我首先要对列c进行分组排序(按列a分组),然后我要保留每个组中列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

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


Tags: 数据x1x2y1x3x4y2y3
3条回答

您可以使用函数groupbysort_values

df = df.groupby(['a'])['c'].sum().reset_index()
df = df.sort_values(by=['c'], ascending=False)

您可以^{}a并找到每个组的^{},然后^{}返回结果数据帧以保留匹配的行:

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

您可以使用^{}max这样做:

df.loc[df['c'].eq(df.groupby('a')['c'].transform('max')), :]
     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

相关问题 更多 >