如何在python中找到事件的开始时间和结束时间?

我有一个数据框由第 1 列即事件组成,第 2 列是日期时间:


样本数据


 Event   Time

    0   2020-02-12 11:00:00

    0   2020-02-12 11:30:00

    2   2020-02-12 12:00:00

    1   2020-02-12 12:30:00

    0   2020-02-12 13:00:00

    0   2020-02-12 13:30:00

    0   2020-02-12 14:00:00

    1   2020-02-12 14:30:00

    0   2020-02-12 15:00:00

    0   2020-02-12 15:30:00

我想找到每个事件的开始时间和结束时间:


所需数据


 Event  EventStartTime  EventEndTime

    0   2020-02-12 11:00:00 2020-02-12 12:00:00

    2   2020-02-12 12:00:00 2020-02-12 12:30:00

    1   2020-02-12 12:30:00 2020-02-12 13:00:00

    0   2020-02-12 13:00:00 2020-02-12 14:30:00

    1   2020-02-12 14:30:00 2020-02-12 15:00:00

注意:EventEndTime 是事件将值从值 1 更改为更改为 0 或任何其他值的时间,反之亦然


守着星空守着你
浏览 130回答 3
3回答

白板的微信

这是一种无需 for 循环即可获得结果的方法。我假设输入数据被读入一个名为 df 的数据帧:# Initialize the output dfdfout = pd.DataFrame()dfout['Event'] = df['Event']dfout['EventStartTime'] = df['Time']现在,我创建了一个名为“change”的变量,它告诉您事件是否发生了变化。dfout['change'] = df['Event'].diff()这就是 dfout 现在的样子:   Event       EventStartTime  change0      0  2020-02-12 11:00:00     NaN1      0  2020-02-12 11:30:00     0.02      2  2020-02-12 12:00:00     2.03      1  2020-02-12 12:30:00    -1.04      0  2020-02-12 13:00:00    -1.05      0  2020-02-12 13:30:00     0.06      0  2020-02-12 14:00:00     0.07      1  2020-02-12 14:30:00     1.08      0  2020-02-12 15:00:00    -1.09      0  2020-02-12 15:30:00     0.0现在,我继续删除事件未更改的行:dfout = dfout.loc[dfout['change'] !=0 ,:]现在,这将给我留下事件已更改的行。接下来,当前事件的事件结束时间就是下一个事件的开始时间。dfout['EventEndTime'] = dfout['EventStartTime'].shift(-1)数据框如下所示:   Event       EventStartTime  change         EventEndTime0      0  2020-02-12 11:00:00     NaN  2020-02-12 12:00:002      2  2020-02-12 12:00:00     2.0  2020-02-12 12:30:003      1  2020-02-12 12:30:00    -1.0  2020-02-12 13:00:004      0  2020-02-12 13:00:00    -1.0  2020-02-12 14:30:007      1  2020-02-12 14:30:00     1.0  2020-02-12 15:00:008      0  2020-02-12 15:00:00    -1.0                  NaN如果不需要,您可以选择删除“更改”列以及最后一行。

慕侠2389804

假设数据框是data:current_event = Noneresult = []for event, time in zip(data['Event'], data['Time']):    if event != current_event:        if current_event is not None:            result.append([current_event, start_time, time])        current_event, start_time = event, timedata = pandas.DataFrame(result, columns=['Event','EventStartTime','EventEndTime'])诀窍是保存您的事件编号;如果下一个事件编号与保存的事件编号不同,则必须结束已保存的事件并开始新的事件。

倚天杖

使用 group by 和 agg 以获取所需格式的输出。df =pd.DataFrame([['0',11],['1',12],['1',13],['0',15],['1',16],['3',11]],columns=['Event','Time'] )df.groupby(['Event']).agg(['first','last']).rename(columns={'first':'start-event','last':'end-event'})输出:Event start-event   end-event   0      11           151      12           163      11           11
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python