在 window 函数的帮助下用平均 Pyspark 替换 NA

Replace NA with mean Pyspark with help of window function

我想在 pyspark

中的 window 函数的帮助下,用基于多列的均值和中位数替换 NA

示例输入:

均值所需的输出:

中位数所需的输出: 输出将与上面相同,但需要根据中位数替换并且在 pyspark

中的 pyspark.sql.functions 中找不到函数

正在创建示例数据框:

from pyspark.sql.window import Window
from pyspark.sql import functions as F

list=([1,5,4],
    [1,5,None],
    [1,5,4],
    [1,5,4],
    [2,5,1],
    [2,5,2],
    [2,5,None],
    [2,5,None])
df=spark.createDataFrame(list,['I_id','p_id','xyz'])
df.show()

+----+----+----+
|I_id|p_id| xyz|
+----+----+----+
|   1|   5|   4|
|   1|   5|null|
|   1|   5|   4|
|   1|   5|   4|
|   2|   5|   1|
|   2|   5|   2|
|   2|   5|null|
|   2|   5|null|
+----+----+----+

正在创建 Window 并填充空值:

w=Window().partitionBy("I_id","p_id")
df.withColumn("mean",F.mean("xyz").over(w))\
.withColumn("xyz", F.when(F.col("xyz").isNull(),F.col("mean")).otherwise(F.col("xyz")))\
.drop("mean").show()

+----+----+---+
|I_id|p_id|xyz|
+----+----+---+
|   1|   5|4.0|
|   1|   5|4.0|
|   1|   5|4.0|
|   1|   5|4.0|
|   2|   5|1.0|
|   2|   5|2.0|
|   2|   5|1.5|
|   2|   5|1.5|
+----+----+---+