【问题标题】:Identifying overlapping events (datetime records) in a pandas dataframe识别 pandas 数据框中的重叠事件(日期时间记录)
【发布时间】:2021-06-14 02:33:37
【问题描述】:

我很难在我的数据集中检测重叠的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

有没有一种方法(高效或低效)无需对列进行排序即可检测重叠?

【问题讨论】:

    标签: python pandas dataframe datetime python-datetime


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-12
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      相关资源
      最近更新 更多