<pre class="lang-py prettyprint-override"><code>>>> names = ['Id', 'Datetime', 'Drug']
>>> df = pd.read_csv('drugs.csv', names=names, parse_dates=['Datetime'])
>>> df
Id Datetime Drug
0 66531 2012-12-18 08:31:00 acetaminophen-HYDROcodone
1 66531 2012-12-18 17:44:00 acetaminophen-HYDROcodone
2 66531 2013-02-18 22:36:00 morphine
3 66531 2013-02-19 05:07:00 morphine
4 66531 2013-02-19 10:13:00 morphine
5 66531 2013-02-19 15:27:00 morphine
6 66531 2013-02-19 17:33:00 oxyCODONE
7 66531 2013-02-19 19:20:00 acetaminophen-HYDROcodone
8 66531 2013-02-19 20:54:00 methadone
9 66531 2013-02-20 06:46:00 methadone
10 66531 2013-02-20 13:21:00 methadone
11 66531 2013-02-20 22:18:00 methadone
</code></pre>
<p>然后,遍历所有行组合。它是有效的,但不是最有效的解决办法。如果您的数据集非常大,您可能需要考虑更优雅的方法。你知道吗</p>
<pre class="lang-py prettyprint-override"><code>drop_idx = set([])
for idx_early, row_early in df.iterrows():
for idx_late, row_late in df.iterrows():
if (row_early['Datetime'] + pd.DateOffset(hours=24) > row_late['Datetime'] and
row_early['Datetime'] < row_late['Datetime'] and
row_early['Drug'] == 'morphine' and
row_late['Drug'] == 'methadone' and
row_early['Id'] == row_late['Id']):
drop_idx.add(idx_early)
</code></pre>
<p>现在,删除已标识的行并打印结果。你知道吗</p>
<pre class="lang-py prettyprint-override"><code>>>> df.drop(index=drop_idx)
Id Datetime Drug
0 66531 2012-12-18 08:31:00 acetaminophen-HYDROcodone
1 66531 2012-12-18 17:44:00 acetaminophen-HYDROcodone
6 66531 2013-02-19 17:33:00 oxyCODONE
7 66531 2013-02-19 19:20:00 acetaminophen-HYDROcodone
8 66531 2013-02-19 20:54:00 methadone
9 66531 2013-02-20 06:46:00 methadone
10 66531 2013-02-20 13:21:00 methadone
11 66531 2013-02-20 22:18:00 methadone
</code></pre>