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

通用转换嵌套字典格式DataFrame至指定结构化表格

XGBoost训练结果DataFrame通用转换方案

需求说明

需要将XGBoost模型训练输出的嵌套结构DataFrame,转换为满足以下要求的扁平化表格:

  • 训练轮次(epochs)顺序全局统一,支持扩展至1000/10000级规模
  • 数据集名称(如train/test)、指标名称(如auc/logloss)可任意变更,无需修改转换逻辑
  • 自动适配多数据集、多指标的动态行列数量
  • 输出列名格式固定为datasetname_metricname

输入示例

手动构造的测试DataFrame:

import pandas as pd

df = pd.DataFrame({
    'train': {'auc': [0.432, 0.543, 0.523],
              'logloss': [0.123, 0.234, 0.345]},
    'test': {'auc': [0.456, 0.567, 0.678],
             'logloss': [0.321, 0.432, 0.543]}
})

实际业务中来自XGBoost训练的场景:

df = pd.DataFrame(model_xgb.evals_result())
df.columns = ['train', 'test']  # 数据集名、指标均可按需修改

通用转换实现

import pandas as pd

def transform_xgb_eval_results(df):
    # 展开嵌套结构,将数据集和指标维度转为列
    transformed_df = df.unstack().unstack(0).reset_index(drop=True)
    # 动态生成符合要求的列名
    transformed_df.columns = [f"{col[0]}_{col[1]}" for col in transformed_df.columns]
    # 添加epochs列(从0开始对应训练轮次)
    transformed_df.insert(0, 'epochs', range(len(transformed_df)))
    return transformed_df

代码特性

  • 完全动态适配:无需硬编码任何数据集或指标名称,自动识别输入结构
  • 高性能扩展:基于Pandas原生操作,处理万级epochs数据无性能瓶颈
  • 格式严格合规:自动生成datasetname_metricname格式的列名,epochs列统一前置

输出示例

调用transform_xgb_eval_results(df)后得到的结果结构:

epochstrain_auctrain_loglosstest_auctest_logloss
00.4320.1230.4560.321
10.5430.2340.5670.432
20.5230.3450.6780.543

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:50:13