将一列映射到另一列以修复 pyspark 数据框中的空值

问题描述 投票:0回答:1

我有一个巨大的数据框,包含多个列。列

brand
有多个空值,我想通过使用
product_id
作为映射来填充尽可能多的空值来修复它们。例如

品牌 产品_id
A 1234
B 5678
5678

我的预期结果是

品牌 产品_id
A 1234
B 5678
B 5678

为此,我首先创建要使用的映射数据框:

df= df[df["product_id"], df["brand"]].distinct()

然后我尝试将其转换为字典,这样我就可以在映射函数中使用它:

dictionary = df_mapping.toPandas().set_index('product_id').to_dict()

但是这里我得到了一个嵌套字典,我无法将其用于映射

{'brand': {'18000928': 'samsung',
  '3200144': 'panasonic',
  '1004903': 'huawei',
  '5100575': 'apple',

有什么办法解决这个问题吗?这是正确的方法吗? 我认为没有办法使用

replace
使用整个数据框作为等价物。

非常感谢!

pyspark mapping
1个回答
0
投票

假设品牌和产品id之间是一对多的关系(即1个product_id不能有2个品牌),您可以使用窗口函数来实现它,而无需创建任何引用:

df.withColumn(
    "brand_from_other_product",
    func.first("brand", ignorenulls=True).over(Window.partitionBy("product_id"))
).withColumn(
    "brand", func.coalesce("brand", "brand_from_other_product")
)

您可以使用

first
函数来获取第一个非空值。

© www.soinside.com 2019 - 2024. All rights reserved.