pandas提取某字段最大值所对应的行

我们处理某些表格数据时,会遇到某个字段在不同类别中有不同的值,有时候需要提取某个类别中该字段最大值所对应的行,只用group by 往往不行。其实,使用group by 和 merge 相结合,即可轻松解决这个问题。

定义一个DataFrame:

在这里插入图片描述
在上图的df中,不同的name对应着num值、年份,
现在想提取每一year的最大num所对应的name

2、接下来,对df进行group by,并取最大值:

在这里插入图片描述
可以看到,通过group by,我们提取出了每一year所对应的最大num。注意:我们进行group by 时,选取了原df中的两列:‘year’、‘num’,这样做是排除name的干扰,groupby()函数中,需要指定分组依赖的列‘year’,并设定不将分组列作为索引;最后的max()是按最大值提取该分组的数据,当然其他函数如min()/mean()同样适用。

3、然后,我们利用第2步所得的最大值分组,与原表进行连接,提取最大值所在行:

在这里插入图片描述
可以看到,对df_groupby和原表df进行左连后,成功取出了每一year最大num对应的name!

源码如下:

import pandas as pd
 
data = {'year':[2016,2016,2017,2017,2017,2018,2018],
        'num':[2,5,4,7,8,90,78],
        'name':['a','b','c','d','e','f','g']}
 
df = pd.DataFrame(data)
 
df_groupby = df[['year','num']].groupby(by='year',as_index=False).max()
 
df_merge = pd.merge(df_groupby,df,on=['year','num'],how='left')
  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值