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