Pandas:将DataFrame字典转换为键为一级列的合并DataFrame
Pandas字典转多级列DataFrame实现方法
直接使用Pandas内置的concat函数即可实现需求,不需要额外编写循环或映射逻辑,核心是指定拼接方向和一级列名参数。
核心实现代码
假设存储多个子DataFrame的字典变量名为df_dict,仅需1行代码即可完成转换:
import pandas as pd result = pd.concat(df_dict, axis=1)
实现逻辑说明
- 传入字典作为拼接输入时,
pd.concat会自动将字典的键作为一级列索引 - 设置
axis=1代表沿列方向拼接,每个子DataFrame的原有列名会自动作为对应一级分类下的二级子列 - 拼接时默认按行索引自动对齐不同子DataFrame的行:
- 需要强制按行位置拼接、忽略原有索引时,追加参数
ignore_index=True - 只保留所有子DataFrame共有的行时,追加参数
join='inner'
- 需要强制按行位置拼接、忽略原有索引时,追加参数
样例验证
用提供的输入样例测试:
# 构造样例输入字典 df_dict = { 'kp3r_busd': pd.DataFrame( [[7905, '2022-07-05T14:45:00.000Z', 131.55, 131.84, 130.38, 130.94, 90.29]], columns=['source_id', 'timestamp', 'open', 'high', 'low', 'close', 'volume'] ), 'mln_usdt': pd.DataFrame( [[19252, '2022-07-05T13:00:00.000Z', 24.561, 24.561, 24.561, 24.561, 0.0]], columns=['source_id', 'timestamp', 'open', 'high', 'low', 'close', 'volume'] ) } result = pd.concat(df_dict, axis=1)
运行后生成的result为两级列结构,列索引输出如下,完全匹配期望格式:
MultiIndex([('kp3r_busd', 'source_id'), ('kp3r_busd', 'timestamp'), ('kp3r_busd', 'open'), ('kp3r_busd', 'high'), ('kp3r_busd', 'low'), ('kp3r_busd', 'close'), ('kp3r_busd', 'volume'), ('mln_usdt', 'source_id'), ('mln_usdt', 'timestamp'), ('mln_usdt', 'open'), ('mln_usdt', 'high'), ('mln_usdt', 'low'), ('mln_usdt', 'close'), ('mln_usdt', 'volume')], )
常用后续操作
- 提取单个一级分类下的所有数据:直接通过一级列名索引即可,例如
result['kp3r_busd']会返回kp3r_busd下所有子列组成的普通DataFrame - 多级列拍平为单级列:如果需要把两级列合并为
一级列名_二级列名格式的单级列,执行以下代码即可:
result.columns = [f'{col_1}_{col_2}' for col_1, col_2 in result.columns]
内容的提问来源于stack exchange,提问作者sci9
相关产品推荐
相关产品推荐

