Python 将一个df的两列值与另一个数据帧的一列值连接起来。基于某些条件?

Python 将一个df的两列值与另一个数据帧的一列值连接起来。基于某些条件?,python,pandas,dataframe,Python,Pandas,Dataframe,我有这样一个数据帧: df1 col1 col2 col3 col4 1 2 A S 3 4 A P 5 6 B R 7 8 B B 我有另一个数据帧: df2 col5 col6 col3 9 10

我有这样一个数据帧:

df1
col1       col2      col3      col4
 1           2        A         S
 3           4        A         P
 5           6        B         R
 7           8        B         B
我有另一个数据帧:

df2
col5      col6         col3
 9         10           A
 11        12           R
如果df1的col3和col4的任何值与它将连接的df2的col3值匹配,我想连接这两个数据帧

最终的数据帧将如下所示:

df3
col1    col2    col3    col5   col6
 1       2       A       9      10
 3       4       A       9      10
 5       6       R       11     12
如果col3值出现在df2中,则它将通过col3值连接,否则,如果它出现在df2的col3值中,则它将通过col4值连接

如何使用pandas/python以最有效的方式实现这一点

将double与默认内部联接一起使用,对于在
df3
中匹配的第二个筛选出行,最后一起使用:

df3 = df1.drop('col4', axis=1).merge(df2, on='col3')
df4 = (df1.drop('col3', axis=1).rename(columns={'col4':'col3'})
            .merge(df2[~df2['col3'].isin(df1['col3'])], on='col3'))


df = pd.concat([df3, df4],ignore_index=True)
print (df)
   col1  col2 col3  col5  col6
0     1     2    A     9    10
1     3     4    A     9    10
2     5     6    R    11    12
编辑:使用左连接和最后一个:


如果两个列都匹配会发生什么?如果两个列都匹配,它将使用第一个列,我的意思是COL3如果我想让所有行都有空值,那么?@kallolsmanta-你能解释更多吗?预期的输出是什么?将添加df1的最后一行,因为col3和col4都不匹配,它将在这些字段中给出nan值。df1的长度和最终输出df相同
df3 = df1.drop('col4', axis=1).merge(df2, on='col3', how='left')
df4 = (df1.drop('col3', axis=1).rename(columns={'col4':'col3'})
            .merge(df2, on='col3', how='left'))

df = df3.combine_first(df4)
print (df)
   col1  col2 col3  col5  col6
0     1     2    A   9.0  10.0
1     3     4    A   9.0  10.0
2     5     6    B  11.0  12.0
3     7     8    B   NaN   NaN