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

重采样DataFrame后如何删除不需要的列?

解决MultiIndex列结构下提取close列的问题

哈哈,重采样后出现的多层列(MultiIndex)确实刚开始接触的时候有点绕,我来给你几种简单的解决办法!

先搞清楚列结构

首先你可以先打印下重采样后的列名,明确它的层级结构:

print(resamp.columns)

你会看到类似这样的输出:

MultiIndex([('a-LTP', 'open'),
('a-LTP', 'high'),
('a-LTP', 'low'),
('a-LTP', 'close'),
('b-Lowest_Sell', 'open'),
...,
('c-Highest_Buy', 'close')],
)

第一层是你原来的列名(a-LTP、b-Lowest_Sell等),第二层是OHLC对应的四个类型(open/high/low/close)。


方法1:一次性提取所有列的close值

如果你需要所有原始列对应的close价格,用xs()方法最高效,它能直接从多层索引中切出指定层级的内容:

# axis=1表示操作列,level=1指定取第二层索引里的'close'
close_all = resamp.xs('close', axis=1, level=1)

得到的close_all是普通DataFrame,列名就是你原来的a-LTP、b-Lowest_Sell等,值都是对应的close价格。

方法2:精准提取单个/指定的close列

如果你只需要某一个或某几个列的close值,直接用元组索引就可以:

# 只提取a-LTP的close列
ltp_close = resamp[('a-LTP', 'close')]

# 同时提取a-LTP和c-Highest_Buy的close列
selected_close = resamp[[('a-LTP', 'close'), ('c-Highest_Buy', 'close')]]

注意提取多个列时,外层要加列表把元组包起来。

方法3:扁平化列名后再提取

如果你觉得多层列用着麻烦,可以先把列名合并成单层,之后就像操作普通DataFrame一样提取:

# 复制一份避免修改原始数据
resamp_flat = resamp.copy()
# 把多层列名用下划线拼接成单层
resamp_flat.columns = ['_'.join(col) for col in resamp_flat.columns]

# 现在直接用新列名提取就行
ltp_close_flat = resamp_flat['a-LTP_close']

这种方式适合后续需要频繁操作列的场景,不用再记多层索引的结构。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:23:24