python - 如何在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 或任何其他值的时间,反之亦然
解决方案
这是一种无需 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
如果不需要,您可以选择删除“更改”列以及最后一行。
推荐阅读
- javascript - MongoDB 计数未返回正确的数字
- outlook - 如何在 Windows 机器上查看 Outlook 365 的整个 SMTP 包?
- ios - 如何将 NSString 转换为 UTF-8 以外的编码?
- c++ - 通过 neo4j_client 库删除节点不起作用
- android - 如何在nativescript vue中处理webview上的android后退按钮
- html - 具有 3 个 div 的容器,使用 Flex-box/Grid
- c# - C# Word 使用段落放大单元格
- vb.net - 固定(字节* outBuf = 传出)?
- amazon-web-services - 有没有办法将变量与 AWS CLI 一起用于 SNS?
- python - 如何使用“xlsxwriter”而不是“openpyxl”写入具有多个工作表的 excel?