Pandas多索引DataFrame列与索引值相乘报KeyError求助
解决Pandas多索引DataFrame计算时的KeyError问题
首先,咱们来拆解你遇到的KeyError: 'POP.'问题:POP.是你MultiIndex的第二级索引,并不是DataFrame的列。你执行的reset_index(level=2, drop=True)只是移除了第三级索引SEX,但POP.仍然属于索引的一部分,所以用df['POP.']去访问自然会报错。
下面给你两种可行的解决方案,都能得到你想要的输出:
方案一:直接从多索引提取值计算(推荐,无需改动索引结构)
不需要重置索引,直接通过index.get_level_values()方法获取POP.的数值,再和PERCENT相乘:
# 直接计算TOTAL列 df['TOTAL'] = df.index.get_level_values('POP.') * df['PERCENT']
执行这段代码后,你的DataFrame会直接新增TOTAL列,完全符合期望的输出结构。
方案二:将POP.转为列后计算(适合需要临时操作列的场景)
如果需要先把POP.转为列进行操作,之后再还原索引,可以这么做:
# 将POP.从索引转为列 df = df.reset_index(level='POP.') # 计算TOTAL df['TOTAL'] = df['POP.'] * df['PERCENT'] # 把POP.重新放回多索引中,恢复原结构 df = df.set_index('POP.', append=True)
最终效果验证
执行上述任意一种方案后,你的DataFrame会变成:
| DATE | POP. | SEX | PERCENT | TOTAL |
|---|---|---|---|---|
| 2015-01-01 | 100 | MALE | 0.51 | 51 |
| FEMALE | 0.49 | 49 | ||
| 2016-01-01 | 200 | MALE | 0.52 | 104 |
| FEMALE | 0.48 | 96 |
完全匹配你想要的输出格式。
内容的提问来源于stack exchange,提问作者user2242044
相关产品推荐
相关产品推荐

