如何使用Pandas将含DataFrame值的字典转换为层级结构DataFrame
问题:合并多个DataFrame为指定层级结构
现有两个示例DataFrame:
df1:
Idx A B C 0 1 1.1 1.2 1.3 1 2 1.4 1.5 1.4
df2:
Idx A B C 0 1 2.1 2.2 2.3 1 2 2.4 2.5 2.4
期望合并为带层级索引的DataFrame,结构如下:
Idx A B C R1 0 1 1.1 1.2 1.3 1 2 1.4 1.5 1.4 R2 0 1 2.1 2.2 2.3 1 2 2.4 2.5 2.4
尝试用字典存储后转成DataFrame,代码如下:
dict_val = {} dict_val['R1'] = df1 dict_val['R2'] = df2 df_join = pd.DataFrame.from_dict(dict_val)
但报错:ValueError: Must pass 2-d input.
错误原因
pd.DataFrame.from_dict()要求字典中的值是一维或二维的可迭代对象(比如列表、数组),但你存入的是完整的DataFrame(本身是二维结构),不符合输入要求,因此抛出错误。
解决方案
使用pd.concat()工具合并多个DataFrame,通过keys参数可以快速给每个子DataFrame添加顶层索引,实现目标层级结构。
完整代码示例
import pandas as pd # 构造示例DataFrame df1 = pd.DataFrame({ 'Idx': [1, 2], 'A': [1.1, 1.4], 'B': [1.2, 1.5], 'C': [1.3, 1.4] }) df2 = pd.DataFrame({ 'Idx': [1, 2], 'A': [2.1, 2.4], 'B': [2.2, 2.5], 'C': [2.3, 2.4] }) # 合并并添加层级索引 result = pd.concat([df1, df2], keys=['R1', 'R2']) # 打印结果 print(result)
说明
keys=['R1', 'R2']会自动为每个子DataFrame生成顶层行索引,形成(Group, 原索引)的多层索引结构。- 合并后的DataFrame保留了原DataFrame的所有列,输出格式与你期望的结构完全一致。
内容的提问来源于stack exchange,提问作者Tutu
相关产品推荐
相关产品推荐

