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
相关产品推荐
相关产品推荐

