<p>我觉得你把事情弄得太复杂了。您可以将列的<code>.time</code>与<code>time</code>对象进行比较:</p>
<pre><code>(
(time(6) <= di.time) & (di.time <= time(18))
) | (
(di.time >= time(19)) & (di.time < time(21))
)</code></pre>
<p>因此,这将检查时间是否介于6:00和18:00(包括这两个时间段)之间,或者19:00(包括这两个时间段)和21:00(不包括这两个时间段)之间</p>
<p>这也将提高工作效率。例如:</p>
<pre><code>>>> di
DatetimeIndex(['2015-04-24 02:00:00', '2015-11-26 23:00:00',
'2016-01-18 00:00:00', '2016-06-27 22:00:00',
'2016-08-12 17:00:00', '2016-10-21 11:00:00',
'2016-11-07 11:00:00', '2016-12-09 23:00:00',
'2017-02-20 01:00:00', '2017-06-17 18:00:00'],
dtype='datetime64[ns]', freq=None)
>>> ((time(6) <= di.time) & (di.time <= time(18))) | ((di.time >= time(19)) & (di.time < time(21)))
array([False, False, False, False, True, True, True, False, False,
True])
</code></pre>
<p>您可以使用<code>.astype(int)</code>将其转换为<code>int</code>:</p>
<pre><code>>>> (((time(6) <= di.time) & (di.time <= time(18))) | ((di.time >= time(19)) & (di.time < time(21)))).astype(int)
array([0, 0, 0, 0, 1, 1, 1, 0, 0, 1])
</code></pre>