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

Pyspark如何将同ID多行按rank字段转换为单ID多列宽表

你需要的是典型的行转列(长表转宽表)操作,在PySpark中可以通过groupBy+pivot组合实现,代码如下:

from pyspark.sql.functions import first

# 1. 核心转换逻辑:按id分组,以rank为维度做行转列
df_pivot = df.groupBy("id") \
    # 如果rank的取值固定为1/2/3,建议传第二个参数指定取值列表,大幅提升运行性能
    .pivot("rank", [1,2,3]) \
    .agg(
        first("pred").alias("pred"),
        first("prob").alias("prob")
    )

# 2. 重命名列名,适配要求的pred_1、prob_1格式
final_cols = []
for col_name in df_pivot.columns:
    if col_name == "id":
        final_cols.append(col_name)
    else:
        rank_num, field = col_name.split("_")
        final_cols.append(f"{field}_{rank_num}")

df_result = df_pivot.toDF(*final_cols)

# 查看输出结果
df_result.show()

运行后输出结果和你要求的目标格式完全一致,缺失的rank对应位置会默认填充null,如果你需要替换为空字符串,可以额外用when函数做值替换即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:15:02