如何基于唯一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
相关产品推荐
相关产品推荐

