pandas调用unstack('Medal')触发KeyError报错问题求助
错误原因
你触发KeyError的核心原因是:当前分组后的结果只有单级索引(仅Team字段作为索引),不存在名为Medal的索引层级,unstack自然无法找到对应层级做拆分。
你之前的写法atl.groupby('Team')['Medal'].count()是仅按国家(Team)分组统计总奖牌数,结果的索引只有Team一列,值是每个国家的总奖牌数量,完全没有保留奖牌类型的维度信息,自然无法拆分金银铜的分布。
正确实现步骤
- 第一步先过滤掉
Medal为空的记录,避免统计到未获得奖牌的参赛数据 - 分组时同时传入
Team和Medal两个维度,让结果生成双层索引:第一层为国家,第二层为奖牌类型 - 此时再调用
unstack('Medal')就能把奖牌类型拆分为不同列 - 如果部分国家没有某类奖牌,可加
fill_value=0把空值填充为0,避免绘图异常
可运行代码示例
# 过滤出获得奖牌的记录 medal_data = atl[atl['Medal'].notna()] # 双维度分组+统计+拆分奖牌类型+取奖牌总数前20的国家+绘图 medal_data.groupby(['Team', 'Medal'])['Medal'].count()\ .unstack('Medal', fill_value=0)\ .nlargest(20, columns=['Gold', 'Silver', 'Bronze'])\ .plot(kind='bar', figsize=(10, 10))
内容的提问来源于stack exchange,提问作者Nighteg
相关产品推荐
相关产品推荐

