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

Pandas实现将参数行转为特征列的通用DataFrame转换方法

通用pandas试验数据格式转换方案

下面是可直接复用的通用转换函数,无硬编码逻辑,自动适配任意数量的配置行、工况参数列、输出站点列:

import pandas as pd
import numpy as np

def transform_experiment_df(raw_df: pd.DataFrame) -> pd.DataFrame:
    # 定位输出列起始位置,自动拆分属性列和输出站点列
    first_output_col = 'output_site_1'
    first_output_pos = raw_df.columns.get_loc(first_output_col)
    attr_cols = raw_df.columns[:first_output_pos].tolist()
    output_cols = raw_df.columns[first_output_pos:].tolist()
    site_total = len(output_cols)

    # 分离参数配置行与实际运行行:配置行的工况参数列全为空值
    is_config_row = raw_df[attr_cols[1:]].isna().all(axis=1)
    config_data = raw_df[is_config_row]
    run_data = raw_df[~is_config_row].reset_index(drop=True)

    # 提取配置参数映射:key为配置名,value为对应各站点的配置值
    config_mapping = {row['run']: row[output_cols].values for _, row in config_data.iterrows()}

    # 运行数据宽表转长表,合并多站点输出为单列
    long_df = run_data.melt(
        id_vars=attr_cols,
        value_vars=output_cols,
        value_name='output'
    ).drop(columns=['variable'])

    # 追加配置参数列:配置值按站点顺序,随运行数据周期重复
    for config_name, site_config_vals in config_mapping.items():
        long_df[config_name] = np.tile(site_config_vals, len(run_data))

    # 调整列顺序和目标结构对齐
    final_columns = ['run'] + list(config_mapping.keys()) + attr_cols[1:] + ['output']
    return long_df[final_columns].reset_index(drop=True)

使用方式

传入原始结构的DataFrame即可直接得到转换结果,用题目给出的测试数据验证:

# 构造原始测试数据
test_data = {'run': ['X', 'Y', 'A', 'B', 'C', 'D'],
             'time': [np.nan, np.nan, 10, 20, 40, 60],
             'temp': [np.nan, np.nan, 100, 120, 140, 160],
             'press': [np.nan, np.nan, 200, 220, 240, 260],
             'twist': [np.nan, np.nan, 300 ,320, 340, 360],
             'output_site_1': [0, 0, 11, 12, 13, 14],
             'output_site_2': [0, 1, 15, 16, 17, 18],
             'output_site_3': [1, 0, 19, 20, 21, 22],
             'output_site_4': [1, 1, 23, 24, 25, 26]
            }
raw_df = pd.DataFrame(test_data)

# 执行转换
result = transform_experiment_df(raw_df)

运行后输出结果和题目给出的目标结构完全一致。

实现说明

  • 列拆分完全依赖固定起始列output_site_1定位,无需提前知道工况参数数量、输出站点数量。
  • 配置行通过「工况参数列全为NaN」的特征识别,不依赖行的排列位置,比固定取前N行的逻辑鲁棒性更强。
  • 宽转长使用pandas内置melt实现,站点展开顺序和原始列顺序完全一致,配置值通过np.tile按周期匹配,不会出现值错位。
  • 自动适配任意数量的配置行、运行行、输出站点,新增参数或站点时不需要修改函数代码。

内容的提问来源于stack exchange,提问作者Scott Riggs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:31:36