<p>尝试<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html#pandas-dataframe-merge" rel="nofollow noreferrer">^{<cd1>}</a>然后筛选出7天内的行:</p>
<pre class="lang-py prettyprint-override"><code>new_df = df1.merge(df2, on='Number', suffixes=('.df1', '.df2'))
new_df = new_df[
abs(new_df['DateDone.df1'] - new_df['DateDone.df2']) <= pd.Timedelta(days=7)
]
</code></pre>
<p><code>new_df</code>:</p>
<pre class="lang-none prettyprint-override"><code> Number Report.df1 DateDone.df1 Report.df2 DateDone.df2
0 1 some words 2021-01-13 hocum poklum 2021-01-11
3 1 more stuff 2021-08-21 mjimmeny cricket 2021-08-21
8 44 rara rasputin 2021-10-13 im innocent 2021-10-12
13 2 gobbledy bla 2019-03-01 its not really 2019-03-06
</code></pre>
<hr/>
<p>将两个帧的“DateDone”转换为DateTime(如果尚未完成):</p>
<pre class="lang-py prettyprint-override"><code>df1['DateDone'] = pd.to_datetime(df1['DateDone'], format='%d/%m/%Y')
df2['DateDone'] = pd.to_datetime(df2['DateDone'], format='%d/%m/%Y')
</code></pre>
<p>获取两个日期时间之间的持续时间</p>
<pre class="lang-py prettyprint-override"><code>new_df['DateDone.df1'] - new_df['DateDone.df2']
</code></pre>
<pre class="lang-none prettyprint-override"><code>0 2 days
1 -220 days
2 222 days
3 0 days
4 60 days
5 -549 days
6 3743 days
7 610 days
8 1 days
9 4293 days
10 -3410 days
11 -4019 days
12 273 days
13 -5 days
dtype: timedelta64[ns]
</code></pre>
<p>应用<code>abs</code>删除持续时间的方向性,并与所需持续时间进行比较:</p>
<pre class="lang-py prettyprint-override"><code>abs(new_df['DateDone.df1'] - new_df['DateDone.df2']) <= pd.Timedelta(days=7)
</code></pre>
<p>使用此索引确定要保留的行:</p>
<pre class="lang-none prettyprint-override"><code>0 True
1 False
2 False
3 True
4 False
5 False
6 False
7 False
8 True
9 False
10 False
11 False
12 False
13 True
dtype: bool
</code></pre>