如何有条件地合并两个数据框

时间:2020-05-13 10:03:16

标签: python apache-spark pyspark

我有两个数据框。它们中的列集略有不同 df1:

id   col1    col2   col3
 1     15      20      8
 2      0    null      5

df2:

id   col1    col2    col4
 1     10      10      40
 2     10      30      50

请告诉我如何获取这些数据框的并集?在这种情况下,您需要合并列 result_df:

id  col1 col2 col3 col4
 1    15   20    8   40
 2     0   30    5   50

我需要将两个数据帧与id合并以获得额外的列col4,对于col1,col2,col3,请从df1获取值,除非该值为null,在这种情况下,请用df2的值替换它。

3 个答案:

答案 0 :(得分:2)

join上使用

id,然后跟随when / otherwise模式。该代码适用于您的示例:

  from pyspark.sql.functions import when

  result = (df1.join(df2, on=['id']).
            withColumn('_col1', when(df1['col1'].isNotNull(), df1['col1']).otherwise(df2['col1'])).
            withColumn('_col2', when(df1['col2'].isNotNull(), df1['col2']).otherwise(df2['col2'])).
            select('id', '_col1', '_col2', 'col3', 'col4').
            toDF('id', 'col1', 'col2', 'col3', 'col4'))

答案 1 :(得分:0)

您可以根据ID组合2个数据框:

df = pd.merge(df1, df2, on = 'id')
df

答案 2 :(得分:0)

这里是:

import pandas as pd

id=[1,2]
col1= [15,0]
col2=[20,'']
col3=[8,5]

dict_1 = {'id':id,'col1': col1, 'col2': col2, 'col3':col3}
df1= pd.DataFrame(dict_1)


id=[1,2]
col1= [10,10]
col2=[10,30]
col3=[40,50]

dict_2 = {'id':id,'col1': col1, 'col2': col2, 'col3':col3}
df2= pd.DataFrame(dict_2)

df_merge = pd.concat([df1,df2])
df_merge

输出
enter image description here

相关问题