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

无需手动创建数组与MultiIndex,将指定结构DataFrame转换为多级列DataFrame的方法

简便实现多级列DataFrame转换

当然有!完全不用手动构建MultiIndex数组,用pandas自带的pivot方法加上简单的层级调整就能轻松实现需求,步骤超简洁:

第一步:准备初始数据

先把你给出的初始数据转换成DataFrame:

import pandas as pd

data = [
    ["EURUSD", "1M", 5, 6],
    ["EURUSD", "3M", 5, 6],
    ["EURUSD", "6M", 5, 6],
    ["EURUSD", "1Y", 5, 6],
    ["USDJPY", "1M", 5, 6],
    ["USDJPY", "3M", 5, 6],
    ["USDJPY", "6M", 5, 6],
    ["USDJPY", "1Y", 5, 6],
    ["GBPUSD", "1M", 5, 6],
    ["GBPUSD", "3M", 5, 6],
    ["GBPUSD", "6M", 5, 6],
    ["GBPUSD", "1Y", 5, 6],
]

df = pd.DataFrame(data, columns=["Ccy Pair", "Tenor", "IV", "RV"])

第二步:一键转换+层级调整

只用3行代码就能得到目标格式:

# 用pivot转成宽格式,自动生成多级列索引
pivoted_df = df.pivot(index="Ccy Pair", columns="Tenor", values=["RV", "IV"])

# 交换列的层级,把Tenor(期限)放到上层
pivoted_df = pivoted_df.swaplevel(axis="columns")

# 按上层列排序,确保每个期限下的子列顺序是RV、IV
pivoted_df = pivoted_df.sort_index(axis="columns", level=0, sort_remaining=False)

最终输出效果

执行print(pivoted_df)会得到:

1M     3M     6M     1Y     
            RV IV RV IV RV IV RV IV
Ccy Pair                            
EURUSD      6  5  6  5  6  5  6  5
USDJPY      6  5  6  5  6  5  6  5
GBPUSD      6  5  6  5  6  5  6  5

补充说明

  • pivot方法会自动帮你生成多级列索引,完全不需要手动创建数组
  • swaplevel只是调整层级顺序,让Tenor作为第一级列索引
  • 如果需要调换RV和IV的显示顺序,只需要修改pivot方法里values参数的顺序即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 20:37:31