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
相关产品推荐
相关产品推荐

