Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在唯一ID上连接两个数据帧,但如果ID不';不存在_Python_Pandas - Fatal编程技术网

Python 在唯一ID上连接两个数据帧,但如果ID不';不存在

Python 在唯一ID上连接两个数据帧,但如果ID不';不存在,python,pandas,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,那么maincolum

我有两个数据帧:

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')
但我遇到的问题不是替换丢失的值,而是确保它们仍然包括在内。谢谢

您可以在将
df2
的列重命名为
df1
(例如UID2到UID..)后使用:


我们可以先使用缺少的值,然后使用额外的列:

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 3不应该是
car
?@Erfan是的,应该是!固定的谢谢
  UID mainColumn
0    1      truck
1    2     orange
2    3        car
3    4       boat
4    5      plane
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