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

为MultiIndex DataFrame新增层级,嵌入子DataFrame的实现方案

解决方案

可以通过pd.concat结合DataFrame.apply实现一步到位的高效处理,自动扩展列的MultiIndex层级:

import pandas as pd
import numpy as np

# 初始化原DataFrame
df = pd.DataFrame(columns=pd.MultiIndex.from_arrays([[100,100],[10,20],[1,3]]),
                 data=np.random.random(12).reshape(6,2))

def get_df(col):
    return pd.DataFrame({'Double': col*2,'Triple': col*3})

# 核心实现:生成子DataFrame并横向拼接,自动保留原列索引
dg = pd.concat(df.apply(get_df, axis=0), axis=1)
# 按需调整列层级顺序(示例:将新增的Transform层级放在最内层)
dg.columns = dg.columns.reorder_levels([0,1,2,3])

关键步骤说明

  • df.apply(get_df, axis=0):对原DataFrame的每一列调用get_df,返回一个由子DataFrame组成的Series,每个子DataFrame包含Double和Triple两列。
  • pd.concat(..., axis=1):将子DataFrame横向拼接,此时列的MultiIndex会自动组合为(原列索引元组, 转换类型)的结构,比如原列(100,10,1)对应新列((100,10,1), 'Double')和((100,10,1), 'Triple')。
  • reorder_levels:可根据需求调整层级顺序,若希望新增的Double/Triple作为最外层,只需传入[3,0,1,2]即可。

可选:给层级命名增强可读性

如果需要更清晰的索引命名,可以补充以下代码:

# 给原MultiIndex列命名
df.columns.names = ['Group', 'SubGroup', 'ID']
# 拼接时指定新增层级的名称
dg = pd.concat(df.apply(get_df, axis=0), axis=1, names=['Transform'])
# 调整层级顺序并应用命名
dg.columns = dg.columns.reorder_levels(['Group', 'SubGroup', 'ID', 'Transform'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:22:05