Pandas:更新第二个数据帧的列值

Kev*_*ang 3 python left-join dataframe pandas

我有一个df1包含日期和其他值的数据框,如下所示:

date      value1     value2     value3
20100101  1          2          3
20100102  1          2          3
20100103  1          2          3
20100104  1          3          4
20100105  1          3          4
20100106  1          3          5
20100107  1          3          6
Run Code Online (Sandbox Code Playgroud)

然后我想更新另一个数据帧中的一些值df2

date      value1      
20100102  2           
20100104  3        
20100105  4    
20100106  5       
20100107  6     
Run Code Online (Sandbox Code Playgroud)

所以预期的结果将是:

date      value1     value2     value3
20100101  1          2          3
20100102  2          2          3
20100103  1          2          3
20100104  3          3          4
20100105  4          3          4
20100106  5          3          5
20100107  6          3          6  
Run Code Online (Sandbox Code Playgroud)

据我所知,我不能用左连接来做到这一点,除了迭代每个日期之外,还有什么快速而简单的方法可以实现这一点吗?


更新:

感谢所有的答案!

我还有另一个案例,df2日期与 不同df1,例如

date      value1      
20100102  2           
20100104  3        
20100105  4    
20100106  5       
20100107  6   
20100108  7
Run Code Online (Sandbox Code Playgroud)

添加dropna(axis=0, how='any')piRSquared 的答案将解决这种情况。

piR*_*red 5

Option 1

d2.set_index('date').combine_first(
    d1.set_index('date')).reset_index().astype(d1.dtypes)

       date  value1  value2  value3
0  20100101       1       2       3
1  20100102       2       2       3
2  20100103       1       2       3
3  20100104       3       3       4
4  20100105       4       3       4
5  20100106       5       3       5
6  20100107       6       3       6
Run Code Online (Sandbox Code Playgroud)

Option 2

d1[['date']].merge(d2, 'left').combine_first(d1).astype(d1.dtypes)

       date  value1  value2  value3
0  20100101       1       2       3
1  20100102       2       2       3
2  20100103       1       2       3
3  20100104       3       3       4
4  20100105       4       3       4
5  20100106       5       3       5
6  20100107       6       3       6
Run Code Online (Sandbox Code Playgroud)