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