【问题标题】:Replace NA with mean Pyspark with help of window function [closed]在窗口函数的帮助下用平均 Pyspark 替换 NA [关闭]
【发布时间】:2020-06-08 19:19:28
【问题描述】:

我想借助 pyspark 中的窗口函数将 NA 替换为基于多列的均值和中位数

示例输入:

均值所需的输出:

中位数所需的输出: 输出将与上面相同,但需要根据中位数替换,并且在 pyspark 中找不到 pyspark.sql.functions 中的函数

【问题讨论】:

标签: python apache-spark pyspark window


【解决方案1】:

创建示例数据框:

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|
+----+----+----+

创建窗口并填充空值:

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|
+----+----+---+

【讨论】:

  • 上述代码分区cols中的一个更正应该是I_id和p_id
  • 你能举出类似的例子来用中位数进行 NA 插补吗?
  • @VigneshwarThiyagarajan 我无法在这里回答,因为它已关闭。打开一个新问题
  • 我发布了用中位数替换 na 的新问题
  • 生病检查一下
猜你喜欢
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
  • 2022-01-01
  • 2022-10-25
  • 1970-01-01
  • 2018-03-16
相关资源
最近更新 更多