<p>方法:</p>
<ol>
<li>我用双空格分隔符读入您的输入</李>
<li>我用<code>split()</code>将字符串转换为<code>df['alertdate']</code>列中的列表</李>
<li>我创建了一个名为<code>df['alertdate_lt_10days']</code>的列,该列首先假定为“否”,随后将为相关行返回“是”</李>
<li>我遍历了列、行和单元格,关键是:<br/>
A.第一个<code>for</code>语句-使用<code>zip()</code>同时循环遍历两列的行和b。第二个<code>for</code>语句-循环<code>alertdate</code>列单元格中的列表,以便能够比较日期,看看它们是否在10天之内</li>
<li>我将<code>recorddate</code>和<code>alertdate</code>字符串转换为日期,然后使用<code>.days</code>将<code>timedelta</code>对象转换为<code>integer</code>(默认情况下,减去日期会创建一个timedelta对象,不能与整数进行比较)</李>
<li>最后,我使用了非常有用和实用的<code>np.where()</code>为我们先前创建的新列指定了一个“是”</李>
</ol>
<p>代码:</p>
<pre><code>import pandas as pd
import numpy as np
df=pd.read_clipboard(sep='\s+\s+')
df['alertdate'] = df['alertdate'].apply(lambda x: x.split(','))
df['alertdate_lt_10days'] = 'No'
for recorddate, list_alertdate in zip(df['recorddate'], df['alertdate']):
for alertdate in list_alertdate:
if -10 < (pd.to_datetime(alertdate) - pd.to_datetime(recorddate)).days < 10:
df['alertdate_lt_10days'] = np.where(df['recorddate'] == recorddate, 'Yes', df['alertdate_lt_10days'])
df
</code></pre>
<p>输出:</p>
<pre><code> userid recorddate alertdate alertdate_lt_10days
0 tom 2018-06-12 00:00:00.0 [2018-06-13 00:00:00.0, 2015-04-13 00:00:00.0] Yes
1 nick 2019-06-01 00:00:00.0 [2019-11-11 00:00:00.0, 2020-02-12 00:00:00.0... No
2 bob 2019-06-02 00:00:00.0 [2019-06-01 00:00:00.0] Yes
</code></pre>