Python:如果两个数据帧的几列相等,则将一个数据帧的值设置为另一个数据帧的值

Python:如果两个数据帧的几列相等,则将一个数据帧的值设置为另一个数据帧的值,python,pandas,dataframe,Python,Pandas,Dataframe,假设以下两个数据帧: df1: Column1 Column2 Column3 Column4 Column5 2007-10-31 1M 1 1Y NaN 2007-10-31 1M 2 2Y NaN 2007-10-31 1M 3 3Y NaN 2008-03-14 3M 3 3Y

假设以下两个数据帧:

df1:
Column1         Column2   Column3  Column4  Column5
2007-10-31      1M        1        1Y       NaN
2007-10-31      1M        2        2Y       NaN
2007-10-31      1M        3        3Y       NaN
2008-03-14      3M        3        3Y       NaN
2008-03-14      3M        4        4Y       0.00873205
2008-03-14      3M        5        5Y       NaN
2008-03-14      3M        6        7Y       0.0111537
我希望在
df1.Column1=df2.Column1
df1.Column2=df2.Column3
的条件下,将
df1.Column5
设置为等于
df2.Column4
(当然还有不满足条件的
df1.Column5
的其余值保持不变)。我已经尝试使用
merge
函数,但它没有给出准确的期望结果,即:

Column1         Column2   Column3  Column4  Column5
2007-10-31      1M        1        1Y       0.0188979
2007-10-31      1M        2        2Y       0.0196142
2007-10-31      1M        3        3Y       0.0181974
2008-03-14      3M        3        3Y       NaN
2008-03-14      3M        4        4Y       0.00873205
2008-03-14      3M        5        5Y       NaN
2008-03-14      3M        6        7Y       0.0111537
您可以使用+:

输出

      Column1 Column2  Column3 Column4   Column5
0  2007-10-31      1M        1      1Y  0.018898
1  2007-10-31      1M        2      2Y  0.019614
2  2007-10-31      1M        3      3Y  0.018197
3  2008-03-14      3M        3      3Y       NaN
4  2008-03-14      3M        4      4Y  0.008732
5  2008-03-14      3M        5      5Y       NaN
6  2008-03-14      3M        6      7Y  0.011154
这里的关键是首先使用文档中的combine_:

在其他数据库中的相同位置更新值为空的元素


你能粘贴你到目前为止尝试过的代码吗?也许它只需要很少的改动就可以了。我想知道,由于熊猫数据帧的广泛使用,为什么这种操作不能简化呢?
res = df.merge(df1, left_on=['Column1', 'Column2', 'Column4'],
                     right_on=['Column1', 'Column2', 'Column3'],
               how='left', suffixes=('', '_y'))

res['Column5'] = res['Column5'].combine_first(res['Column4_y'])
res = res[df.columns]
print(res)
      Column1 Column2  Column3 Column4   Column5
0  2007-10-31      1M        1      1Y  0.018898
1  2007-10-31      1M        2      2Y  0.019614
2  2007-10-31      1M        3      3Y  0.018197
3  2008-03-14      3M        3      3Y       NaN
4  2008-03-14      3M        4      4Y  0.008732
5  2008-03-14      3M        5      5Y       NaN
6  2008-03-14      3M        6      7Y  0.011154