使用pandas groupby查询每个赛季进球最多的球队的实现方法
pandas 提取每个赛季进球最高球队代码调整方案
你当前的代码是先按「球队+赛季」分组统计总进球后全局排序取前10,逻辑上是跨赛季的总进球排名,自然会出现同一个赛季多个球队入选、赛季重复的问题。可以根据你的数据场景选择对应方案调整:
场景1:原始数据已是单赛季单球队仅对应一行
不需要额外聚合同队同赛季的多场数据,直接用如下代码:
# 取每个赛季进球最大值对应的行索引 max_goals_idx = df.groupby('season')['goals'].idxmax() # 按索引提取对应行,筛选需要的字段 result = df.loc[max_goals_idx, ['team', 'season', 'goals']].reset_index(drop=True)
场景2:原始数据存在同赛季同球队多条记录
需要先合并计算单赛季总进球,用如下代码:
# 先聚合计算每个球队每个赛季的总进球 season_team_total = df.groupby(['season', 'team'], as_index=False)['goals'].sum() # 取每个赛季总进球最大值对应的行索引 max_goals_idx = season_team_total.groupby('season')['goals'].idxmax() # 提取结果 result = season_team_total.loc[max_goals_idx].reset_index(drop=True)
附加:保留同赛季所有并列进球最高的球队
如果存在同一赛季多支球队进球数同为最高的情况,需要保留所有并列记录,用如下代码:
# 先聚合单队单赛季总进球 season_team_total = df.groupby(['season', 'team'], as_index=False)['goals'].sum() # 计算每个赛季的最高进球数,匹配到每一行 season_max = season_team_total.groupby('season')['goals'].transform('max') # 筛选出进球数等于赛季最高值的所有记录 result = season_team_total[season_team_total['goals'] == season_max].reset_index(drop=True)
以上代码输出的result即为无重复赛季、仅包含各赛季最高进球球队的结果。
内容的提问来源于stack exchange,提问作者Faheeem Sajjad
相关产品推荐
相关产品推荐

