我相信还有其他帖子有类似的标题,但我找不到一个看起来像我的例子
基本上,我希望根据"查找"填写一个数据帧。来自另一个数据帧的值。两者都有日期索引(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()
答案 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
。