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

如何按分隔符拆分对应名称和值列,实现Pandas数据宽表转换

解决方案

核心思路是用pandas原生的拆分、长表转宽表的向量化操作替代逐行遍历,性能可提升数十至上百倍,适合处理大数据集。

第一步:修正测试数据集语法(原示例代码漏了逗号)

import pandas as pd

df = pd.DataFrame(
    [
        [1,'Height.Weight','20.50','First'], 
        [2,'Weight.Height','65.30','Second'], 
        [3,'Height.Width.Depth','22.30.10','Third']
    ],
    columns = ['Object','All_Measures','All_Values','Object_Name']
)

第二步:核心处理代码

# 1. 拆分指标、数值列,每行展开为单个指标+对应值的长表结构
df_long = df.assign(
    measure = df['All_Measures'].str.split('.'),
    value = df['All_Values'].str.split('.')
).explode(['measure', 'value'])

# 2. 将值转换为数值类型
df_long['value'] = pd.to_numeric(df_long['value'])

# 3. 长表转宽表,缺失值填充为0
df_wide = df_long.pivot_table(
    index=df_long.index,
    columns='measure',
    values='value',
    fill_value=0
)

# 4. 合并回原表其他字段,删除不需要的原始列
result = pd.concat(
    [df.drop(columns=['All_Measures', 'All_Values']), df_wide],
    axis=1
)

输出结果验证

运行后得到的result结构完全符合预期:

ObjectObject_NameDepthHeightWeightWidth
1First020500
2Second030650
3Third1022030

注:列顺序可按需调整,所有未在All_Measures中出现的指标自动填充为0,原表其他附加列会自动保留无需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:36:07