在唯一ID上连接两个数据框,但如果id不存在,则使用另一个值

时间:2019-06-10 18:14:26

标签: python pandas

我有两个这样的数据框:

UID    mainColumn .... (other columns of data)
1      apple
2      orange
3      apple
4      orange
5      berry
....

UID2   mainColumn2
1      truck
3      car
4      boat
5      plane
...

我需要将第二个数据帧加入基于UID的数据帧,但是,如果df2不包含uid,那么maincolumn值就是我要使用的值。在上面的示例中,UID2不包含值2,因此最终表将类似于

UID    mainColumn ....
1      truck
2      orange
3      car
4      boat
5      plane
...

现在我知道我们可以做以下形式的

df1=df1.merge(df2,left_on='UID', right_on='UID2')

但是我遇到的问题不是替换丢失的值,并确保仍将其包括在内。谢谢!

2 个答案:

答案 0 :(得分:1)

df2的列重命名为df1(例如,将UID2更改为UID ..)后,可以使用combine_first()

df2.columns=df1.columns#be careful, rename only matching columns
final_df=df2.set_index('UID').combine_first(df1.set_index('UID')).reset_index()

  UID mainColumn
0    1      truck
1    2     orange
2    3        car
3    4       boat
4    5      plane

答案 1 :(得分:0)

我们可以先使用merge,然后使用fillna缺失值,最后使用drop多余的列:

final = df1.merge(df2, left_on='UID', right_on='UID2', how='left').drop('UID2', axis=1)

final['mainColumn'] = final['mainColumn2'].fillna(final['mainColumn'])

final.drop('mainColumn2', axis=1, inplace=True)

   UID mainColumn
0    1      truck
1    2     orange
2    3        car
3    4       boat
4    5      plane