如何让Pandas groupby输出每个赛季count最高的完整行数据?
获取每个赛季count值最高的完整行数据
我来帮你搞定这个问题!你目前的代码只提取了每个赛季的最大count值,但没有保留对应的整行数据,这里有几种实用的方法可以实现你的需求:
方法1:使用idxmax() + loc定位目标行
这个方法会先找到每个赛季中count值最大的行的索引,再通过索引提取完整的行数据:
# 获取每个赛季count最大值对应的行索引 max_count_indices = seasonal_name.groupby("season")["count"].idxmax() # 根据索引提取包含所有列的完整行 result = seasonal_name.loc[max_count_indices]
注意:如果同一个赛季中有多行的count值都是最大值,这个方法只会保留每组中第一个出现的最大值行。
方法2:使用transform()筛选匹配行
这个方法会给每行标记出对应赛季的count最大值,再筛选出count等于该最大值的行:
# 新增一列,存储当前赛季的count最大值 seasonal_name['max_count_in_season'] = seasonal_name.groupby("season")["count"].transform('max') # 筛选出count等于赛季最大值的行,并删除临时列 result = seasonal_name[seasonal_name['count'] == seasonal_name['max_count_in_season']].drop(columns='max_count_in_season')
优势:如果同一个赛季存在多个count值并列最大的行,这个方法会把这些行全部保留下来。
方法3:排序后去重
先按赛季分组,每组内按count降序排序,再保留每个赛季的第一行:
# 按赛季升序、count降序排序,然后去除每个赛季的重复行(保留第一行) result = seasonal_name.sort_values(['season', 'count'], ascending=[True, False]).drop_duplicates(subset='season')
这个方法逻辑直观,同样如果有多个最大值行,会保留排序后最先出现的那一行。
用你的示例数据测试的话,方法1和方法3都会返回2008/2009赛季中count=28的曼联那一行,包含所有列的完整数据。
内容的提问来源于stack exchange,提问作者mahmoudamintaha
相关产品推荐
相关产品推荐

