You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:36:15