我有两个这样的数据框:
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')
但是我遇到的问题不是替换丢失的值,并确保仍将其包括在内。谢谢!
答案 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