拼接多个带多级行索引的DataFrame如何保留索引层级?
多级行索引DataFrame批量合并通用方案
实现思路:将所有待合并的DataFrame存入列表,遍历为每个DataFrame的第一级行索引统一赋值为其在列表中的序号,拼接后即可自动实现第一级索引按顺序递增,同时保留两级索引结构。
完整可运行代码
import pandas as pd import numpy as np # 示例生成测试DataFrame arrays = [ np.array([0,0,0]), np.array([0,1,2]), ] arrays_2 = [ np.array([0,0]), np.array([0,1]), ] df1 = pd.DataFrame(np.random.randn(3, 1), index=arrays) df2 = pd.DataFrame(np.random.randn(2, 1), index=arrays_2) # 待合并DataFrame列表,可任意添加N个df,无需提前知道数量 dfs = [df1, df2] # 批量处理每个df的第一级索引 for seq, df in enumerate(dfs): # 保留第二级索引不变,第一级索引替换为当前df的顺序编号 new_index = pd.MultiIndex.from_arrays( [ [seq] * len(df), df.index.get_level_values(1) ] ) df.index = new_index # 拼接得到结果,自动保留两级索引 res = pd.concat(dfs) print(res)
方案说明
- 第二级索引会完全保留原始数据的取值,不会被重置
- 拼接后第一级索引取值和
dfs列表中df的顺序一一对应,从0开始自动递增 - 避免了
append(df, ignore_index=True)会折叠多级索引为单级的问题
内容的提问来源于stack exchange,提问作者Mohamed Ayman Aly
相关产品推荐
相关产品推荐

