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

如何用Pandas将多个DataFrame合并为列MultiIndex结构?

解决方案步骤

  1. 处理单个文件数据,生成列MultiIndex的子表
    无需拆分单个统计指标表,直接通过melt和pivot一步生成目标结构:

    # 读取单个文件数据(readRawData需返回含Tag/Min/Max/Avg/Stdev的DataFrame)
    temp = readRawData(wd, f, dataset)
    # 过滤Tag为'0'的无效行
    temp = temp[temp['Tag'] != '0'].copy()
    # 将宽格式转为长格式:提取传感器标签、统计指标、对应数值
    temp_long = temp.melt(id_vars='Tag', var_name='Metric', value_name='Value')
    # 转成列MultiIndex的宽表:列层级为(传感器标签, 统计指标)
    temp_multi = temp_long.pivot(columns=['Tag', 'Metric'], values='Value')
    

    此时temp_multi的结构即为单测试点的目标格式:

    Tag1                 Tag2
            Min  Max  Avg Stdev Min  Max  Avg Stdev
    0       min1 max1 avg1 std1 min2 max2 avg2 std2
    
  2. 循环合并所有文件数据
    初始化空DataFrame,循环处理每个文件并合并:

    final_data = pd.DataFrame()
    # 假设files是待处理的文件列表
    for f in files:
        temp = readRawData(wd, f, dataset)
        temp = temp[temp['Tag'] != '0'].copy()
        temp_long = temp.melt(id_vars='Tag', var_name='Metric', value_name='Value')
        temp_multi = temp_long.pivot(columns=['Tag', 'Metric'], values='Value')
        # 合并到最终数据集
        final_data = pd.concat([final_data, temp_multi], ignore_index=True)
    
  3. 可选:优化MultiIndex配置
    可给列层级命名或调整顺序,方便后续操作:

    # 给列层级命名
    final_data.columns.names = ['Sensor', 'Statistic']
    # 交换层级顺序(如将统计指标放在第一层)
    final_data = final_data.swaplevel(axis='columns')
    

方案优势

  • 避免拆分多份单指标DataFrame的冗余操作,代码更简洁
  • 生成的标准MultiIndex结构可直接用于筛选分析,无需处理字符串后缀:
    # 筛选所有传感器的平均值数据
    avg_data = final_data.xs('Avg', level='Statistic', axis='columns')
    # 筛选单个传感器Tag1的全量统计数据
    tag1_data = final_data.xs('Tag1', level='Sensor', axis='columns')
    

替代转置方案

若偏好转置操作,可采用以下方式生成目标结构:

temp = readRawData(wd, f, dataset)
temp = temp[temp['Tag'] != '0'].copy()
# 设置Tag为索引后转置,行变为统计指标、列变为传感器标签
temp_transposed = temp.set_index('Tag').T
# 重置索引并构建MultiIndex列
temp_transposed = temp_transposed.reset_index().rename(columns={'index': 'Metric'})
temp_multi = temp_transposed.set_index('Metric').unstack().to_frame().T
# 调整列层级顺序为(传感器标签, 统计指标)
temp_multi = temp_multi.swaplevel(axis='columns').sort_index(axis='columns')

内容的提问来源于stack exchange,提问作者Mike H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:46:09