pandas

时间:2017-11-18 23:38:11

标签: python pandas

我相信还有其他帖子有类似的标题,但我找不到一个看起来像我的例子

基本上,我希望根据"查找"填写一个数据帧。来自另一个数据帧的值。两者都有日期索引(datetimeindex) - 一个是稀疏的(lookup_df),一个是满的(target_df)

import pandas as pd
import numpy as np

target_df = pd.DataFrame(data=[2]*365, index=pd.date_range('20170101', '20171231'), columns=['value'])

lookup_df = pd.DataFrame(data=[7,4,-5,10,2], index=pd.to_datetime(['20170101', '20170401', '20170701', '20171001','20180101']), columns=['value'])

我想要获得的是与target_df具有相同大小/形状的数据帧,其中"值"中的项目。列来自lookup_df - 因此匹配日期将使用lookup_df中的确切值,其间的日期将使用较早的匹配值。

在excel中,这将通过INDEX + MATCH函数完成,但我无法使用一些建议的pandas方法实现这一点,例如.merge()

1 个答案:

答案 0 :(得分:0)

选项1
combine_first

df = lookup_df.combine_first(target_df)

df.loc[lookup_df.index]   # see the changes to `target_df`

            value
2017-01-01    7.0
2017-04-01    4.0
2017-07-01   -5.0
2017-10-01   10.0
2018-01-01    2.0

选项2
使用index.intersection查找交叉索引,然后使用loc分配:

idx = lookup_df.index.intersection(target_df.index)
target_df.loc[idx, 'value'] = lookup_df.loc[idx, 'value']

这会更新target_df,而不是创建新的输出df