我有一个数据框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


然后,我想从另一个数据框df2更新一些值:

date      value1
20100102  2
20100104  3
20100105  4
20100106  5
20100107  6


因此,预期结果将是:

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


据我所知,我不能通过左联接来做到这一点,除了在每个日期中进行迭代之外,是否有任何快速简便的方法来实现这一点?



更新:

感谢所有的答案!

我有另一种情况,当df2df1具有不同的日期时,例如

date      value1
20100102  2
20100104  3
20100105  4
20100106  5
20100107  6
20100108  7


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

最佳答案

选项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




选项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

关于python - Pandas :从第二个数据框更新列值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49685589/

10-12 16:51