在 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|
+----+----+---+
我想在 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|
+----+----+---+