无需手动创建数组与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
相关产品推荐
相关产品推荐

