【问题标题】:pyspark join with more conditionspyspark 加入更多条件
【发布时间】:2020-02-21 02:03:51
【问题描述】:

我正在尝试将两个带有“左”的数据框与带有“项目”的条件结合起来

如果 df2 没有“equivalent_item”,那么我想使用 df1“item”本身。如果 df2 "equivalent_item" 为 null(例如 Kiwi),则等效项应该为 null,然后我可以删除该行。

df1:

name     item
jack     rice
hari     banana
mala     apples
kin      kiwi
Mike     salt
fall     sugar
yedy     pasta
vall     fruits   

df2:

item     equivalent_item
rice      basmathi
banana    delmonte 
apples    fuji apple
kiwi 
pasta     barello

预期输出:

name     items        equivalent_item
jack     rice         basmathi
hari     banana       delmonte
mala     apples       fuji apple
kin      kiwi
Mike     salt         salt
fall     sugar        sugar
yedy     pasta        barello
vall     fruits       fruits  

我必须这样做:

def equivalent_name(name):
    elif name == 'rice':
        return 'basmathi'
    elif name == 'banana':
        return 'delmonte'
    elif name == 'apples':
        return 'fuji apple'
    elif name == 'apples':
        return 'fuji apple'
    elif name == 'pasta':
        return 'barello'
    else
        return name

df1['name'] = df1['name'].apply(equivalent_name)

【问题讨论】:

  • 这可以通过一些指标标志来完成。假设您在 df2 中创建了一个值为 1 的任意列。如果您在项目上连接两个表,则该标志将连接两个都可用的键的值。下一步可以从items中查找任意列并填充值

标签: python dataframe pyspark


【解决方案1】:

使用 df.join() 进行左连接

df1.join(df2, ["item"], "left")

如果连接列在数据框中有不同的名称,则使用。

df1.join(df2, df1["item_1"]=df2["item_2"], "left")

这将导致数据框同时包含 item_1 和 item_2 列,您可以删除不需要的列。

【讨论】:

  • 是的,我尝试使用“左”连接。但是我需要知道如何写条件,比如如果“equivalent_item”不可用,那么我需要自己写原始的“item”。谢谢。
猜你喜欢
  • 2016-03-06
  • 2021-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 2013-07-22
  • 1970-01-01
相关资源
最近更新 更多