使用groupby获取组中具有最大值的行

在按['Sp','Mt']列分组后,如何查找熊猫数据帧中具有计数列最大值的所有行

示例1:以下数据帧,我通过['Sp','Mt']对其进行分组:

Sp Mt值计数
0毫米1 S1 a**3**
1mm1s1n2
2毫米1 S3断路器**5**
3 MM2 S3 mk**8**
4 MM2 S4 bg**10**
5 MM2 S4 dgd 1
6毫米4 S2 rd 2
7 MM4 S2 cb 2
8 MM4 S2 uyi**7**

预期输出:获取组间计数最大的结果行,如:

0 MM1 S1 a**3**
2毫米1 S3断路器**5**
3 MM2 S3 mk**8**
4 MM2 S4 bg**10**
8 MM4 S2 uyi**7**

示例2:我根据['Sp','Mt']对该数据帧进行分组:

Sp Mt值计数
4 MM2 S4 bg 10
5 MM2 S4 dgd 1
6毫米4 S2 rd 2
7 MM4 S2 cb 8
8 MM4 S2 uyi 8

对于上面的示例,我希望得到all每个组中count等于max的行,例如:

MM2 S4 bg 10
MM4 S2 cb 8
MM4 S2 uyi 8
[1]on

:df
Output[1]:
Sp Mt值计数
0毫米1 S1 a 3
1mm1s1n2
2毫米1 S3 cb 5
3平方毫米S3 mk 8
4 MM2 S4 bg 10
5 MM2 S4 dgd 1
6毫米4 S2 rd 2
7 MM4 S2 cb 2
8 MM4 S2 uyi 7
At[2]on:df.groupby(['Mt'],sort=False)['count'].max()
Output[2]:
Mt
S1 3
S3 8
S4 10
S2 7
姓名:伯爵

要获取原始DF的索引,可以执行以下操作:

[3]on

:idx=df.groupby(['Mt'])['count'].transform(max)=df['count']
In[4]:df[idx]
Output[4]:
Sp Mt值计数
0毫米1 S1 a 3
3平方毫米S3 mk 8
4 MM2 S4 bg 10
8 MM4 S2 uyi 7

请注意,如果每个组有多个max值,则将返回所有值

更新

有可能这就是OP的要求:

[5]on

:df['count_max']=df.groupby(['Mt'])['count'].transform(max)
In[6]:df
Output[6]:
Sp Mt值计数\u最大值
0毫米1 S1 a 3 3
1毫米1 S1 n 2 3
2毫米1 S3 cb 5 8
3平方毫米S3 mk 8
4 MM2 S4 bg 10 10
5 MM2 S4 dgd 1 10
6毫米4 S2路27号
7毫米4 S2 cb 2 7
8 MM4 S2 uyi 7

发表评论