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

如何使用Pandas访问DataFrame多层列结构中的PX_FIRST与PX_LAST子列

解决Pandas多层列DataFrame的列提取问题

你这是遇到了Pandas多层索引列(MultiIndex Columns)的访问问题,这种情况在处理带层级结构的数据集时挺常见的。从你给出的输出能看出来,你的DataFrame列是两层结构:第一层是date和PRICE,PRICE下面又嵌套了PX_FIRST和PX_LAST两个子列。直接用df[['date','PRICE']]会把整个PRICE子列组都拿过来,但你需要单独拆分出这三个目标列,这里有几种简单好用的方法:

方法1:用元组指定完整列路径

多层列的每个列其实对应一个元组((上层列名, 下层列名)),所以你可以直接用元组列表来精准选你要的列:

# 定义要选择的目标列
target_cols = [('date', ''), ('PRICE', 'PX_FIRST'), ('PRICE', 'PX_LAST')]
df_filtered = df[target_cols]

# 可选操作:把多层列名扁平化,转成普通的单层列名
df_filtered.columns = ['date', 'PX_FIRST', 'PX_LAST']

方法2:拆分提取后拼接

如果你觉得元组写法有点绕,也可以分开提取再拼接:

import pandas as pd

# 单独提取date列
date_column = df['date']
# 提取PRICE下面的两个子列
price_sub_columns = df['PRICE'][['PX_FIRST', 'PX_LAST']]
# 横向拼接成新的DataFrame
df_filtered = pd.concat([date_column, price_sub_columns], axis=1)

方法3:用xs方法批量提取子列

如果PRICE下面的子列不止这两个,或者你想批量提取同层级的子列,可以用xs方法跨层级筛选,再结合date列:

# 提取PRICE层下的所有子列(这里就是PX_FIRST和PX_LAST)
price_columns = df.xs('PRICE', axis=1, level=0)
# 把date列和提取到的子列拼起来
df_filtered = pd.concat([df['date'], price_columns], axis=1)

这几种方法都能帮你得到只包含date、PX_FIRST、PX_LAST的DataFrame,选你顺手的用就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:48:03