You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas crosstab绘制堆叠柱状图如何仅展示奖牌数Top5的队伍

奥运奖牌数据前5队伍可视化修改方案

你现有代码的问题是生成交叉表时使用了全量参赛队伍数据,只需要提前筛选出总奖牌数排名前5的队伍数据再绘图即可,修改后的完整代码如下:

import pandas as pd # 若已导入pandas可省略该行

# 原有数据去重处理逻辑
medal_ranks = olympics[olympics['Medal'] != 'NaN'].groupby(['NOC', 'Year', 'Sport', 'Event', 'Season'])
medal_ranks = medal_ranks.first()
medal_ranks = medal_ranks.reset_index()

# 新增:获取总奖牌数前5的NOC列表
top5_noc = medal_ranks['NOC'].value_counts().head(5).index
# 筛选出仅包含前5队伍的数据集
medal_ranks_top5 = medal_ranks[medal_ranks['NOC'].isin(top5_noc)]

# 绘图参数
medal_colors = ['darkgoldenrod', 'gold', 'silver']
# 用筛选后的数据集生成交叉表绘图
cross = pd.crosstab(medal_ranks_top5.NOC, medal_ranks_top5.Medal).plot(kind='bar',color = medal_colors, 
                                                  stacked=True, figsize=(18,5))

如果你需要固定展示你提到的USA、GBR、FRA、ITA、CAN这五个队伍,不想靠统计结果动态计算,可以直接手动指定NOC列表,替换上面的筛选逻辑即可:

# 手动指定前5队伍列表
target_noc = ['USA', 'GBR', 'FRA', 'ITA', 'CAN']
medal_ranks_top5 = medal_ranks[medal_ranks['NOC'].isin(target_noc)]

注意:medal_colors的顺序需要和pd.crosstab输出的奖牌列顺序对应,如果你发现颜色和奖牌类型不匹配,可以打印pd.crosstab(medal_ranks_top5.NOC, medal_ranks_top5.Medal).columns查看列顺序后调整颜色列表即可。

内容的提问来源于stack exchange,提问作者Amitay Auerbach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:24:05