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 的答案将解决这种情况。
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)
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)