为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守着星空守着你 2022-07-26 15:40:10
我有一个数据框由第 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 或任何其他值的时间,反之亦然
查看完整描述

3 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

这是一种无需 for 循环即可获得结果的方法。我假设输入数据被读入一个名为 df 的数据帧:


# Initialize the output df

dfout = pd.DataFrame()

dfout['Event'] = df['Event']

dfout['EventStartTime'] = df['Time']

现在,我创建了一个名为“change”的变量,它告诉您事件是否发生了变化。


dfout['change'] = df['Event'].diff()

这就是 dfout 现在的样子:


   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

现在,我继续删除事件未更改的行:


dfout = dfout.loc[dfout['change'] !=0 ,:]

现在,这将给我留下事件已更改的行。


接下来,当前事件的事件结束时间就是下一个事件的开始时间。


dfout['EventEndTime'] = dfout['EventStartTime'].shift(-1)

数据框如下所示:


   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

如果不需要,您可以选择删除“更改”列以及最后一行。


查看完整回答
反对 回复 2022-07-26
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

假设数据框是data:


current_event = None

result = []

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, time

data = pandas.DataFrame(result, columns=['Event','EventStartTime','EventEndTime'])

诀窍是保存您的事件编号;如果下一个事件编号与保存的事件编号不同,则必须结束已保存的事件并开始新的事件。


查看完整回答
反对 回复 2022-07-26
?
倚天杖

TA贡献1828条经验 获得超3个赞

使用 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           15

1      12           16

3      11           11


查看完整回答
反对 回复 2022-07-26
  • 3 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信