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

如何拆分DataFrame首行字符串并转换为目标数据格式

DataFrame列名拆分与重塑方案

问题场景

导入的数据集列名为数字序号,首行(索引1的行)单元格字符串均以Area、Mean、StdDev开头,括号内包含不同标签内容。需将字符串按括号拆分,把前缀设为列标题,括号内内容设为行标签,最终转换为目标格式。

初始数据格式:

import pandas as pd

df1 = pd.DataFrame({
1: {'1': "Area(E10_1_nucleus)", '2': 435}, 
2: {'1': "Mean(E10_1_nucleus)", '2': 313},
3: {'1': "StdDev(E10_1_nucleus)", '2': 150}, 
4: {'1': "Area(E10_1_cytoplasm)", '2': 635},
5: {'1': "Mean(E10_1_cytoplasm)", '2': 847}, 
6: {'1': "StdDev(E10_1_cytoplasm)", '2': 321}})

期望中间格式df2:

df2= pd.DataFrame({
1: {'1': "Area", '2':'E10_1_nucleus','3': 435}, 
2: {'1': "Mean",'2':'E10_1_nucleus' ,'3': 313},
3: {'1': "StdDev",'2':'E10_1_nucleus' ,'3': 150}, 
4: {'1': "Area",'2':'E10_1_cytoplasm' ,'3': 635},
5: {'1': "Mean",'2':'E10_1_cytoplasm' ,'3': 847}, 
6: {'1': "StdDev",'2':'E10_1_cytoplasm' ,'3': 331}})

最终目标格式df3:

df3= pd.DataFrame({
'Label': {'1':'E10_1_nucleus' ,'2':'E10_1_cytoplasm' },
'Area': {'1': 435,'2':635}, 
'Mean': {'1': 313,'2':847},
'StdDev': {'1': 150,'2':331}})

实现方法

1. 生成中间格式df2

# 提取首行数据并拆分前缀与标签
split_data = df1.loc['1'].str.extract(r'(\w+)\((\w+)\)')

# 创建包含拆分结果的新行
new_rows = pd.DataFrame([split_data[0], split_data[1]], index=['1_new', '2_new'])

# 合并新行与原数据,重置索引匹配df2格式
df2 = pd.concat([new_rows, df1]).reindex(['1_new', '2_new', '2'])
df2.index = ['1', '2', '3']
df2.columns = df1.columns

2. 直接生成最终格式df3(高效路径)

无需经过df2,直接从df1转换:

# 转置df1,将原列转为行处理
df_transposed = df1.T.reset_index(drop=True)

# 拆分首列字符串,提取指标(Area/Mean/StdDev)和标签
df_transposed[['Metric', 'Label']] = df_transposed[1].str.extract(r'(\w+)\((\w+)\)')

# 重塑为目标宽表格式
df3 = df_transposed.pivot(index='Label', columns='Metric', values=2).reset_index()
df3.columns.name = None

运行以上代码即可得到目标格式的df3。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:10:28