Python-使用groupby获取分组中具有最大值的行
在按“['Sp','Mt']
列”分组之后,如何在pandas数据框中找到count
列的最大值的所有行?
示例1:以下dataFrame,我将其分组['Sp','Mt']
:
Sp Mt Value count0 MM1 S1 a **3**
1 MM1 S1 n 2
2 MM1 S3 cb 5
3 MM2 S3 mk **8**
4 MM2 S4 bg **10**
5 MM2 S4 dgd 1
6 MM4 S2 rd 2
7 MM4 S2 cb 2
8 MM4 S2 uyi **7**
预期的输出:获取各组之间计数最大的结果行,例如:
0 MM1 S1 a **3**1 3 MM2 S3 mk **8**
4 MM2 S4 bg **10**
8 MM4 S2 uyi **7**
示例2:此数据框,我将其分组为['Sp','Mt']
:
Sp Mt Value count4 MM2 S4 bg 10
5 MM2 S4 dgd 1
6 MM4 S2 rd 2
7 MM4 S2 cb 8
8 MM4 S2 uyi 8
对于上面的示例,我想获取每个组中等于max
的所有行,count
例如:
MM2 S4 bg 10MM4 S2 cb 8
MM4 S2 uyi 8
回答:
In [1]: dfOut[1]:
Sp Mt Value count
0 MM1 S1 a 3
1 MM1 S1 n 2
2 MM1 S3 cb 5
3 MM2 S3 mk 8
4 MM2 S4 bg 10
5 MM2 S4 dgd 1
6 MM4 S2 rd 2
7 MM4 S2 cb 2
8 MM4 S2 uyi 7
In [2]: df.groupby(['Mt'], sort=False)['count'].max()
Out[2]:
Mt
S1 3
S3 8
S4 10
S2 7
Name: count
要获取原始DF的索引,你可以执行以下操作:
In [3]: idx = df.groupby(['Mt'])['count'].transform(max) == df['count']In [4]: df[idx]
Out[4]:
Sp Mt Value count
0 MM1 S1 a 3
3 MM2 S3 mk 8
4 MM2 S4 bg 10
8 MM4 S2 uyi 7
请注意,如果每个组有多个最大值,则将全部返回。
在OP所要求的情况下,这真是万劫不复:
In [5]: df['count_max'] = df.groupby(['Mt'])['count'].transform(max)In [6]: df
Out[6]:
Sp Mt Value count count_max
0 MM1 S1 a 3 3
1 MM1 S1 n 2 3
2 MM1 S3 cb 5 8
3 MM2 S3 mk 8 8
4 MM2 S4 bg 10 10
5 MM2 S4 dgd 1 10
6 MM4 S2 rd 2 7
7 MM4 S2 cb 2 7
8 MM4 S2 uyi 7 7
以上是 Python-使用groupby获取分组中具有最大值的行 的全部内容, 来源链接: utcz.com/qa/435968.html