回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有两个数据帧,其中一个我想在另一个数据帧中找到最近的(以前的)日期</p>
<p><strong>如果日期匹配,则我需要选择上一个日期</strong></p>
<p><code>df_main</code>包含引用信息</p>
<p>对于<code>df_sample</code>,我想在<code>df_main</code>中的<code>Time</code>中查找最近的(但以前的)条目。我可以使用<code>method='ffill'</code>来实现这一点,但是如果<code>Time</code>字段的日期是当天返回的日期-我希望它返回前一天-基本上是一个<code><</code>而不是<code><=</code></p>
<p>在我的示例<code>df_res</code>中,我希望<code>closest_val</code>列包含<code>[ "n/a", 90, 90, 280, 280, 280]</code></p>
<pre class="lang-py prettyprint-override"><code>import pandas as pd
dsample = {'Index': [1, 2, 3, 4, 5, 6],
'Time': ["2020-06-01", "2020-06-02", "2020-06-03", "2020-06-04" ,"2020-06-05" ,"2020-06-06"],
'Pred': [100, -200, 300, -400 , -500, 600]
}
dmain = {'Index': [1, 2, 3],
'Time': ["2020-06-01", "2020-06-03","2020-06-06"],
'Actual': [90, 280, 650]
}
def find_closest(x, df2):
df_res = df2.iloc[df2.index.get_loc(x['Time'], method='ffill')]
x['closest_time'] = df_res['Time']
x['closest_val'] = df_res['Actual']
return x
df_sample = pd.DataFrame(data=dsample)
df_main = pd.DataFrame(data=dmain)
df_sample = df_sample.set_index(pd.DatetimeIndex(df_sample['Time']))
df_main = df_main.set_index(pd.DatetimeIndex(df_main['Time']))
df_res = df_sample.apply(find_closest, df2=df_main ,axis=1)
</code></pre>
<p><img src="https://i.ibb.co/q1pW8mj/Screenshot-from-2020-06-16-11-50-53.png" alt="tables"/></p>