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

如何基于唯一ID重塑DataFrame,实现行转列并匹配对应数值

DataFrame 行转列实现方案

Pandas 环境实现

核心逻辑是先拼接参数与单位为统一列名,再通过透视表完成行列转换:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    "Sample ID": ["S001", "S001", "S002", "S002"],
    "Parameter": ["温度", "湿度", "温度", "压强"],
    "Value": [25.3, 62, 26.1, 101.2],
    "Unit": ["℃", "%RH", "℃", "kPa"]
})

# 拼接参数与单位作为新列名
df["col_name"] = df["Parameter"] + "(" + df["Unit"] + ")"

# 透视转换
res = df.pivot(
    index="Sample ID",
    columns="col_name",
    values="Value"
).reset_index()

# 清除列名的轴标记(可选)
res.columns.name = None

如果存在同一个Sample ID下同一参数有多条记录的情况,可替换为pivot_table方法指定聚合规则,例如aggfunc="mean"取平均值。

PySpark 环境实现

你提到的cast()是数据类型转换方法,无法单独完成行转列的映射逻辑,Spark环境下需要配合pivot方法实现:

from pyspark.sql import SparkSession
from pyspark.sql.functions import concat, lit, first

# 初始化SparkSession
spark = SparkSession.builder.appName("pivot_demo").getOrCreate()

# 构造示例数据
data = [
    ("S001", "温度", 25.3, "℃"),
    ("S001", "湿度", 62, "%RH"),
    ("S002", "温度", 26.1, "℃"),
    ("S002", "压强", 101.2, "kPa")
]
df = spark.createDataFrame(data, ["Sample ID", "Parameter", "Value", "Unit"])

# 拼接参数与单位作为新列名
df = df.withColumn("col_name", concat(df["Parameter"], lit("("), df["Unit"], lit(")")))

# 分组透视完成行转列,可根据业务需求替换first为sum/avg等聚合函数
res = df.groupBy("Sample ID").pivot("col_name").agg(first("Value"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:09:02