赞
踩
我们处理某些表格数据时,会遇到某个字段在不同类别中有不同的值,有时候需要提取某个类别中该字段最大值所对应的行,只用group by 往往不行。其实,使用group by 和 merge 相结合,即可轻松解决这个问题。
在上图的df中,不同的name对应着num值、年份,
现在想提取每一year的最大num所对应的name。
可以看到,通过group by,我们提取出了每一year所对应的最大num。注意:我们进行group by 时,选取了原df中的两列:‘year’、‘num’,这样做是排除name的干扰,groupby()函数中,需要指定分组依赖的列‘year’,并设定不将分组列作为索引;最后的max()是按最大值提取该分组的数据,当然其他函数如min()/mean()同样适用。
可以看到,对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')
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。