python - 识别 pandas 数据框中的重叠事件(日期时间记录)
问题描述
我很难在我的数据集中检测start_datetime
重叠end_datetime
。
目前我的数据集如下所示
但我想去
生成数据集的原始代码
import pandas as pd
df = pd.DataFrame({
'start_datetime':[
'2000-01-01 02:23:49', '1997-12-20 07:22:10', '2000-01-05 03:42:29', '2002-02-25 17:20:09', '1999-06-30 03:33:20',
],
'end_datetime':[
'2000-01-06 04:50:20', '1998-12-20 01:24:12', '2000-03-01 11:01:11', '2003-02-25 22:05:02', '2000-01-01 02:50:30',
],
})
df['start_datetime'] = pd.to_datetime(df['start_datetime'])
df['end_datetime'] = pd.to_datetime(df['end_datetime'])
df
有没有办法(有效或低效)检测重叠而不对列进行排序?
解决方案
Numpy broadcasting
s, e = df[['start_datetime', 'end_datetime']].to_numpy().T
m1 = (s[:, None] > s) & (s[:, None] < e) # Check if start time overlap
m2 = (e[:, None] < e) & (e[:, None] > s) # Check if ending time overlap
df['overlap'] = (m1 | m2).any(1)
结果
>>> df
start_datetime end_datetime overlap
0 2000-01-01 02:23:49 2000-01-06 04:50:20 True
1 1997-12-20 07:22:10 1998-12-20 01:24:12 False
2 2000-01-05 03:42:29 2000-03-01 11:01:11 True
3 2002-02-25 17:20:09 2003-02-25 22:05:02 False
4 1999-06-30 03:33:20 2000-01-01 02:50:30 True
推荐阅读
- dart - 如何在文本中有一个小部件?
- wpf - 调度程序调用异步等待.net 4.6.1
- android - Android-app:切换到房间数据库后旧数据库仍然存在
- python - 用户输入然后显示特定的行数据
- c# - 为什么在尝试在另一个线程上运行异步方法时会收到警告?
- r - 如何使用 facet_grid() 为矩阵的每一列创建 ggplot
- kotlin - Spring Cloud Streams 的 StreamRetryTemplate 不在集成测试中重试
- c# - 如何使用 C# 将 2 个逗号分隔的字符串转换为表/数据表?
- php - hh:mm:ss 格式的两个时间戳之间的差异
- javascript - 替换 HTML 字符串中 HTML 标记属性的引号