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

Python中如何将单行多列的DataFrame数据转换为目标格式

Python 单行多列DataFrame转换实现方案

你需要实现的是宽格式单行数据转长格式多行数据,核心是将横向排布的多组属性键值对拆分为独立行,以下是可直接运行的实现代码:


1. 构造和示例一致的测试数据

首先复现你截图里的原始单行DataFrame结构:

import pandas as pd

# 原始单行多列数据
raw_df = pd.DataFrame({
    "主键id": [1001],
    "属性1名称": ["颜色"],
    "属性1值": ["黑色"],
    "属性2名称": ["尺寸"],
    "属性2值": ["XL"],
    "属性3名称": ["重量"],
    "属性3值": ["180g"]
})

2. 具体实现方法

方法一:wide_to_long 快速转换(适配列名有规律的场景)

如果你的属性列名有统一的编号规则(比如属性X名称/属性X值),用pandas内置的宽转长函数效率最高:

# 统一列名格式,适配函数识别规则
raw_df.columns = ["主键id", "attr_name_1", "attr_val_1", "attr_name_2", "attr_val_2", "attr_name_3", "attr_val_3"]

# 宽转长处理
long_df = pd.wide_to_long(
    raw_df,
    stubnames=["attr_name", "attr_val"],
    i="主键id",
    j="属性序号",
    sep="_"
).reset_index(drop=True)

# 重命名列得到目标格式
long_df.columns = ["主键id", "属性名称", "属性值"]

运行后输出的long_df就是你需要的多行格式。


方法二:逐块拆分重组(适配列名无规律的场景)

如果列名没有统一规则,直接按属性组拆分后拼接更灵活,不需要提前调整列名:

# 提取所有行共用的基础字段
base_part = raw_df[["主键id"]].copy()
result_list = []

# 逐组提取属性对,每一组转成一行
attr_pairs = [
    ("属性1名称", "属性1值"),
    ("属性2名称", "属性2值"),
    ("属性3名称", "属性3值")
]
for name_col, val_col in attr_pairs:
    temp = base_part.copy()
    temp["属性名称"] = raw_df[name_col].iloc[0]
    temp["属性值"] = raw_df[val_col].iloc[0]
    result_list.append(temp)

# 拼接所有分组得到最终结果
final_df = pd.concat(result_list, ignore_index=True)

注意:如果你的原始数据有多行而不是单行,只需要把循环内.iloc[0]的取值逻辑改为逐行遍历取值即可,核心拆分逻辑不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:21:21