我有一个巨大的数据框,包含多个列。列
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
使用整个数据框作为等价物。
非常感谢!
假设品牌和产品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
函数来获取第一个非空值。