当前位置: 首页 > 知识库问答 >
问题:

如何为单列PySpark数据帧正向填充缺失值插补?

程阳平
2023-03-14

我有一个单列PySpark数据框。

| Rank  
|----------
| 10
| 10
| null   
| null     
| 15
| null
| 20
| null     
| null     
| 15
| null   
| 10

我想使用像熊猫ffill()函数一样的前向填充来计算缺失值。

期望输出

| Rank    
|----------
| 10
| 10
| 10   
| 10     
| 15
| 15
| 20
| 20     
| 20     
| 15
| 15   
| 10

免责声明:我在stackoverflow中有一些解决方案,但当您只有一列作为输入时,它们就不起作用了。

共有1个答案

朱兴运
2023-03-14

请查看spark中的滞后和超前功能。

滞后和超前仅用于获得一个偏移。用一个全局变量创建udf很简单,下面是一个简单的例子

var PRV_RANK = 0f

import spark.implicits._
val data = spark.sparkContext.parallelize(Seq(10f, 10f, Float.NaN, Float.NaN, 15f, Float.NaN, 20f, Float.NaN, Float.NaN, 15f, Float.NaN, 10f))
  .toDF("rank")

val forwardFill = udf((rank: Float) =>
{
  if (rank == null || rank.equals(Float.NaN)){
    PRV_RANK
  }
  else {
    PRV_RANK = rank
    rank
  }
})

data.withColumn("rankNew", forwardFill($"rank")).show()

希望这有帮助!

 类似资料:
  • 我有以下示例数据框架: 我只想替换前两列中的空值——列“a”和“b”: 这是创建示例数据帧的代码: 我知道如何使用替换所有空值: 当我尝试这样做时,我失去了第三列:

  • 我有一个缺少“SNAP_ID”值的数据帧。我想根据前一个非缺失值(lag()?)的序列,用浮点值填充缺失值。如果可能的话,我真的想只用dplyr来实现这一点。 假设: 永远不会有丢失的数据,因为第一行或最后一行我根据数据集的最小值和最大值之间的缺失天数生成缺失的日期 数据集中可能存在多个空白 当前数据: 我想要实现的目标: 作为数据帧: 这是我实现这个目标的尝试,但它只适用于第一个缺失的值: 来自

  • 问题内容: 将 变长 列表的Python序列隐式转换为NumPy数组会导致该数组属于 object 类型。 尝试强制使用其他类型将导致异常: 通过使用给定的占位符填充“缺失”值来获取类型为int32的密集NumPy数组的最有效方法是什么? 从我的示例序列中,如果占位符为0,我想得到类似的结果 问题答案: 您可以使用itertools.zip_longest: 注意:对于Python 2,它是ite

  • 我正在尝试合并两个数据帧: 第一个数据帧,,用INTEGERS/STRINGS填充 左边的数据框一起被整数/列表填充。 当我使用pandas函数时,新的数据框将用NaN填充右侧的数据框,而不是列表 我期望使用两个原始数据帧中的值创建一个新的合并数据帧。相反,在新的数据框中,“control”数据框中的所有值都是正确的,但“together”数据框中的所有列表都是正确的 以下是一些样本数据: 以下是

  • 问题内容: 这应该很简单,但是我发现的最接近的内容是这篇文章: pandas:填充组中的缺失值,但我仍然无法解决我的问题。 假设我有以下数据框 我想在每个“名称”组中用平均值填写,即 我不确定要去哪里: 问题答案: 一种方法是使用:

  • 我基本上是在尝试做一个向前填充的归因。下面是它的代码。 我在日志里发现了奇怪的错误。 编辑:问题与如何使用Python识别spark数据帧中的null&nan有关。 文件“C:\spark\python\pyspark\sql\dataframe.py”,第318行,显示打印(self._jdf.showstring(n,20)) 文件“C:\spark\python\lib\py4j-0.10.