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

如何用列表形式访问多层索引DataFrame的指定列?

解决多层列索引DataFrame的列访问问题

这个问题我之前也碰到过!原因是pandas对于多层索引的列,直接用普通列表['bar','one']访问时,会把列表里的每个元素都当成第一层级的列名来查找,但'one'是第二层级的索引,自然找不到就报错了。

给你两个简单的解决方法:

方法1:用元组组成的列表指定列

你需要把每一组层级索引打包成元组,再放到列表里,这样pandas就能准确识别每一层的索引值:

import numpy as np
import pandas as pd

# 还原你的DataFrame
index = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']), np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])]
df = pd.DataFrame(np.random.randn(3, 8), index=['A', 'B', 'C'], columns=index)

# 正确的columns定义
columns = [('bar', 'one')]
# 一次性访问目标列
target_df = df[columns]
print(target_df)

如果需要同时访问多组列,比如bar/one和baz/two,直接扩展列表就行:

columns = [('bar', 'one'), ('baz', 'two')]
target_df = df[columns]

方法2:使用loc进行精准定位

loc方法可以通过第二个参数直接指定多层列索引的元组,写法更简洁:

target_df = df.loc[:, ('bar', 'one')]
# 如果要选多列,同样用元组的列表
target_df = df.loc[:, [('bar', 'one'), ('baz', 'two')]]

两种方法都能完美解决你的问题,你可以根据自己的习惯选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 12:57:46