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

如何访问Pandas透视表的'All'列?解决d.loc[:,'All']触发KeyError问题

问题:无法访问透视表中的'All'列绘制柱状图

嘿,我之前也碰到过一模一样的问题!你这个透视表的列是**多层索引(MultiIndex)**结构,直接用'All'当列名去访问肯定会触发KeyError——因为它只是最内层的索引值,不是完整的列路径。

先给你拆解下这个透视表的列层级:运行print(d.columns)会看到类似这样的结果,能清楚看到列是三层嵌套的:

MultiIndex([('sum', 'Quantity', '601'),
            ('sum', 'Quantity', '631'),
            ('sum', 'Quantity', '641'),
            ('sum', 'Quantity', 'All')],
           names=[None, 'Quantity', 'MvT'])

针对这个情况,有两种实用的解决方法:

方法1:直接指定完整的多层列索引

用元组形式定位到目标列,之后就能正常绘图了:

import matplotlib.pyplot as plt
import numpy as np

# 精准定位到All列
all_quantities = d[('sum', 'Quantity', 'All')]
# 绘制柱状图
all_quantities.plot(kind='bar', figsize=(8,5))
plt.title('Total Quantity per Material')
plt.ylabel('Total Quantity')
plt.xlabel('Material Type')
plt.show()

如果不想把透视表最后一行的All(所有物料的汇总行)包含在图表里,可以加个drop去掉它:

all_quantities = d[('sum', 'Quantity', 'All')].drop('All')

方法2:扁平化列名(方便后续重复操作)

要是之后还要频繁调用这些列,可以先把多层列名合并成单层,这样就能像普通DataFrame一样用简单列名访问:

# 用下划线连接各层级,把列名扁平化
d.columns = ['_'.join(col) for col in d.columns]
# 现在直接访问合并后的列名即可
all_quantities = d['sum_Quantity_All']
# 绘图代码和上面一致
all_quantities.plot(kind='bar')
plt.show()

内容的提问来源于stack exchange,提问作者Luca Consorte

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:29:00