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

pivot后的DataFrame如何通过groupby/merge得到同一ID下的完整关联数据?

PySpark DataFrame 同ID全局字段空值填充方案

你需要的效果可以通过窗口函数直接实现,不需要做二次groupby或者自连接,性能更高也更易维护:

  1. 定义按ID分区的窗口
from pyspark.sql import Window
import pyspark.sql.functions as F

# 窗口规则:按ID分组,同一ID的所有行划为同一个窗口
w = Window.partitionBy("ID")
  1. 对需要全局填充的字段批量填充非空值
    因为同一ID下Name、surname、Town这类全局字段只有一个有效值,用max函数会自动忽略空值,直接提取到整个分组的有效值,原有非空单元格的内容不会被修改:
# 手动指定需要填充的全局字段
df_result = df.withColumn("Name", F.max("Name").over(w)) \
              .withColumn("surname", F.max("surname").over(w)) \
              .withColumn("Town", F.max("Town").over(w))

如果需要填充的全局字段数量较多,可以用批量表达式生成的方式简化代码:

# 把所有需要全局填充的字段放到这个列表里
global_fill_cols = ["Name", "surname", "Town"]
# 生成查询表达式:全局字段用窗口填充,其余字段保留原值
select_expr = [
    F.max(col).over(w).alias(col) if col in global_fill_cols else col 
    for col in df.columns
]
df_result = df.select(*select_expr)

如果你的场景中可能出现同一ID下某个全局字段有多个非空值的情况,也可以把max替换为first(col, ignorenulls=True),效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:06:02