如何用来自其他数据框架的值填充缺失值



我有一个数据帧ID:String列,Type:Int列和Name:String列。

这个数据框的Name列有很多缺失的值。

但是我还有另外三个包含ID列和Name列的数据框。

我想做的是用其他数据框的值填充第一个数据框中的缺失值。其他数据帧不包含属于第一个数据帧的所有id,而且它们还可以包含第一个数据帧中不存在的id。

在这种情况下,什么是正确的方法?我知道我可以组合两个df,如:

df1.join(df2, df1("ID")===df2("ID"), "left_outer")

但是因为我知道第一个数据框中type=2的所有条目都已经有名字了,所以我想只对type=1的行限制这个连接

是否知道如何从三个df中检索Names值以填充原始数据框中的Name列?

您可以拆分,join感兴趣的子集并收集所有内容:

df1
  // Select ones that may require filling
  .where($"type" === 1)  
  // Join
  .join(df2, Seq("ID"), "left_outer")
  // Replace NULL if needed
  .select($"ID", $"Type", coalesce(df1("Name"), df2("Name")).alias("Name"))
  // Union with subset which doesn't require filling
  .union(df1.where($"type" === 2))  // Or =!= 1 as suggested by @AlbertoBonsanto 

如果type列为nullable,则应将此场景与union($"type".isNull)分开覆盖。

相关内容

  • 没有找到相关文章

最新更新