如何从分组聚合表中筛选出各年代获胜次数最多的队伍?
解决每个年代获胜次数最多队伍的筛选问题
你当前生成的grouped是多级索引结构,直接调用max()只会返回整个数据集的最大值,无法按年代分组筛选。下面是两种可行的解决方法:
方法一:用idxmax定位最大值行
先把聚合结果转换成结构清晰的普通DataFrame,再按年代分组定位最大值所在行:
# 重新生成聚合表,给获胜次数列重命名避免混淆 grouped = data.groupby('decade')['winner'].value_counts().rename('win_count').reset_index() # 按年代分组,获取每组内获胜次数最大的行索引 max_row_indices = grouped.groupby('decade')['win_count'].idxmax() # 筛选出每个年代的冠军队伍 top_teams_per_decade = grouped.loc[max_row_indices]
方法二:用transform标记最大值行
通过transform计算每个年代的最大获胜次数,再筛选出等于该值的行:
# 同样先整理聚合表 grouped = data.groupby('decade')['winner'].value_counts().rename('win_count').reset_index() # 筛选出每个年代中获胜次数等于组内最大值的行 top_teams_per_decade = grouped[ grouped['win_count'] == grouped.groupby('decade')['win_count'].transform('max') ]
示例输出(对应你的数据)
运行后会得到如下结果:
| decade | winner | win_count |
|---|---|---|
| 1870 | Scotland | 8 |
| 1880 | Scotland | 23 |
| 1890 | England | 24 |
内容的提问来源于stack exchange,提问作者E.Cuell
相关产品推荐
相关产品推荐

