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

如何将二级索引DataFrame的数据导入三级索引DataFrame?

问题描述

我有一个空的三级索引DataFrame df1:

column1 column2
A   B   C

另有一个二级索引DataFrame df2,列名与df1相同,仅以B和C为索引:

column1 column2
   B     C             
   foo   bar          123     123
   foo2  bar2         456     456

想要高效地将df2的数据导入df1,并将A索引统一设为自定义值(例如1),期望输出如下:

column1 column2
 A      B     C             
 1     foo   bar          123     123
 1     foo2  bar2         456     456

我尝试过类似如下格式的代码,但未找到正确写法:

df1.loc[('my_value',??,??),:] = df2.values
解决方案

方法1:为df2添加一级索引后整合(推荐)

直接给df2补上一级索引(值设为你需要的自定义值,比如1),再整合到df1或者直接生成目标DataFrame:

简洁写法

import pandas as pd

# 给df2添加一级索引并调整层级顺序
df2_with_A = df2.set_index(pd.Index([1]*len(df2), name='A'), append=True).reorder_levels(['A', 'B', 'C'])

# 如果要合并到原空df1
df1 = pd.concat([df1, df2_with_A])

更直观的索引构造写法

# 基于df2的B、C索引,搭配自定义的A值构造三级索引
new_idx = pd.MultiIndex.from_product(
    [[1], df2.index.get_level_values('B'), df2.index.get_level_values('C')],
    names=['A', 'B', 'C']
)
df2_with_A = df2.set_index(new_idx)

# 合并到原df1
df1 = pd.concat([df1, df2_with_A])

方法2:修正loc赋值写法

如果一定要用loc给原df1赋值,可通过批量构造索引实现:

# 生成包含自定义A值的三级索引元组列表
idx_tuples = [(1, b, c) for b, c in df2.index]
# 批量赋值
df1.loc[idx_tuples, :] = df2.values

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:35:03