<p>下面是一种无需for循环即可获得结果的方法。我假设输入数据被读入名为df的数据帧:</p>
<pre><code># Initialize the output df
dfout = pd.DataFrame()
dfout['Event'] = df['Event']
dfout['EventStartTime'] = df['Time']
</code></pre>
<p>现在,我创建了一个名为“change”的变量,它告诉您事件是否已更改</p>
<pre><code>dfout['change'] = df['Event'].diff()
</code></pre>
<p>这就是dfout现在的样子:</p>
<pre><code> Event EventStartTime change
0 0 2020-02-12 11:00:00 NaN
1 0 2020-02-12 11:30:00 0.0
2 2 2020-02-12 12:00:00 2.0
3 1 2020-02-12 12:30:00 -1.0
4 0 2020-02-12 13:00:00 -1.0
5 0 2020-02-12 13:30:00 0.0
6 0 2020-02-12 14:00:00 0.0
7 1 2020-02-12 14:30:00 1.0
8 0 2020-02-12 15:00:00 -1.0
9 0 2020-02-12 15:30:00 0.0
</code></pre>
<p>现在,我继续删除事件未更改的行:</p>
<pre><code>dfout = dfout.loc[dfout['change'] !=0 ,:]
</code></pre>
<p>现在,我将看到事件已更改的行</p>
<p>接下来,当前事件的事件结束时间是下一个事件的开始时间</p>
<pre><code>dfout['EventEndTime'] = dfout['EventStartTime'].shift(-1)
</code></pre>
<p>数据帧如下所示:</p>
<pre><code> Event EventStartTime change EventEndTime
0 0 2020-02-12 11:00:00 NaN 2020-02-12 12:00:00
2 2 2020-02-12 12:00:00 2.0 2020-02-12 12:30:00
3 1 2020-02-12 12:30:00 -1.0 2020-02-12 13:00:00
4 0 2020-02-12 13:00:00 -1.0 2020-02-12 14:30:00
7 1 2020-02-12 14:30:00 1.0 2020-02-12 15:00:00
8 0 2020-02-12 15:00:00 -1.0 NaN
</code></pre>
<p>如果不需要,您可以选择删除“更改”列和最后一行</p>