如何使用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
相关产品推荐
相关产品推荐

