如何将二级索引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
相关产品推荐
相关产品推荐

