Pandas拼接多DataFrame保留索引名生成多级行索引
直接调用pd.concat(dfList, axis=0)无法得到预期结果的原因是:每个子DataFrame的分组标识(G1、G2)仅作为单个DataFrame的索引名存在,拼接时不会自动升级为上层索引保留分组层级。
你可以通过给每个子DataFrame新增一级MultiIndex的方式实现目标效果,示例代码如下:
import pandas as pd # 预处理每个子DataFrame,添加分组级索引 processed_dfs = [] for df in dfList: # 取当前子DataFrame的索引名作为分组标识 group_key = df.index.name # 构造双层索引:第一层为分组名,第二层为原数值索引 df = df.set_index( pd.MultiIndex.from_tuples( [(group_key, idx) for idx in df.index], names=[None, None] ) ) processed_dfs.append(df) # 拼接预处理后的DataFrame Final_Combined_DF = pd.concat(processed_dfs, axis=0)
执行上述代码后打印Final_Combined_DF,得到的展示效果和你预期的完全一致:分组名G1、G2会单独显示在对应数据块的首行,下方为该分组对应的所有数值行,列结构保持原有的monthNum 1、2不变。如果追求更简洁的写法,也可以用列表推导式实现:
Final_Combined_DF = pd.concat( [df.set_index(pd.MultiIndex.from_tuples([(df.index.name, i) for i in df.index])) for df in dfList] )
内容的提问来源于stack exchange,提问作者Zanam
相关产品推荐
相关产品推荐

