You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何从Pandas多级索引DataFrame中筛选此类期货市场数据?

从Pandas多级索引DataFrame提取指定数据的解决方案

嘿,我来帮你搞定这个期货数据的多级索引筛选问题!针对你给出的场景,我们可以利用Pandas的多级索引操作方法,轻松把df1里的合约收盘价提取到df2中,下面是具体步骤和代码:

完整代码示例

import pandas as pd
import numpy as np

# 初始化多级索引DataFrame df1
date_index = pd.date_range('2018-03-20', periods=10)
contract = ['ZN1805', 'ZN1806', 'ZN1807']
price = ['open', 'close']
columns = pd.MultiIndex.from_product([contract, price], names=['contract', 'price'])
df1 = pd.DataFrame(data=np.random.randint(100, 150, (10, columns.shape[0])), index=date_index, columns=columns)

# 方法1:直接生成符合要求的df2
# 提取所有合约的close价格列
close_prices = df1.xs('close', level='price', axis=1)
# 将宽表转为长表,匹配df2的结构
df2 = close_prices.stack().reset_index(name='close')
df2 = df2.rename(columns={'level_0': 'date'})  # 可选:重命名日期列

# 方法2:如果已经初始化了df2,填充数据进去
# df2 = pd.DataFrame(columns=['contract', 'close'], index=df1.index)
# 先提取所有close价格并转为长表,然后填充到df2
# close_series = df1.xs('close', level='price', axis=1).stack()
# df2['contract'] = close_series.index.get_level_values('contract')
# df2['close'] = close_series.values

关键步骤解释

  • 提取指定层级的列:使用df1.xs('close', level='price', axis=1)xs是Cross Section的缩写,专门用于多级索引的快速筛选。这里指定level='price'表示筛选价格层级为close的列,axis=1表示操作的是列索引。
  • 转换表结构close_prices是一个宽表(每列对应一个合约的收盘价),用stack()方法可以把列索引的contract层级转成行索引的一部分,得到一个带多级行索引的Series,再用reset_index()把索引转为普通列,就得到了datecontractclose的结构,完美匹配df2的需求。
  • 填充已有df2的方式:如果已经提前创建了df2,可以通过提取多级索引的层级值(get_level_values)来填充contract列,再把Series的值赋值给close列。

这样就能轻松从多级索引的df1中提取你需要的合约收盘价数据啦!

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

火山引擎 最新活动