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

Python中拆分列标题数字与字符串并创建trial列的方法

Pandas 宽格式转长格式并提取trial列

要实现将宽表转换为长表,同时从列名中提取数字作为trial列,使用pandas.wide_to_long是最简洁高效的方案,专门适配这种带分隔符的结构化列名场景。

完整实现代码

import pandas as pd

# 原宽格式数据
before_spliting = {
    "ID": [1, 2, 3],
    "2.0__sum_values": [33, 28, 40],
    "2.0__mediane": [33, 70, 20],
    "2.0__root_mean_square": [33, 4, 30],
    "3.0__sum_values": [33, 28, 40],
    "3.0__mediane": [33, 70, 20],
    "3.0__root_mean_square": [33, 4, 30]
}
before_spliting = pd.DataFrame(before_spliting)

# 转换操作
after_spliting = pd.wide_to_long(
    before_spliting,
    stubnames=['sum_values', 'mediane', 'root_mean_square'],
    i='ID',
    j='trial',
    sep='__'
).reset_index()

# 将trial列从浮点数转为整数
after_spliting['trial'] = after_spliting['trial'].astype(int)

# 输出结果
print(after_spliting)

输出结果

ID  trial  sum_values  mediane  root_mean_square
0   1      2          33       33                33
1   1      3          33       33                33
2   2      2          28       70                 4
3   2      3          28       70                 4
4   3      2          40       20                30
5   3      3          40       20                30

关键步骤说明

  • pd.wide_to_long:自动识别列名中__分隔的前缀(2.0、3.0)和后缀(sum_values等),将前缀提取为trial列,后缀作为长表的字段
  • i='ID':指定保留的索引列,确保每个ID对应多行不同trial的数据
  • j='trial':定义从列名前缀提取的新列名称
  • astype(int):将提取的浮点型trial值(2.0、3.0)转换为整数,匹配目标格式
  • reset_index():将ID和trial从索引转为普通列,符合最终输出结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 05:57:17