Python 如果时间不是';t是连续组的一部分吗?

Python 如果时间不是';t是连续组的一部分吗?,python,python-3.x,pandas,Python,Python 3.x,Pandas,如果我有一个熊猫数据框,其中有一列日期时间,如下所示: 2018-01-16 01:51:10 2018-01-16 01:57:58 2018-01-16 01:57:58 2018-01-16 01:57:58 2018-01-16 01:57:58 2018-01-16 01:57:58 2018-01-16 01:57:59 2018-01-16 01:57:59 2018-01-16 01:57:59

如果我有一个熊猫数据框,其中有一列日期时间,如下所示:

 2018-01-16 01:51:10
 2018-01-16 01:57:58    
 2018-01-16 01:57:58    
 2018-01-16 01:57:58    
 2018-01-16 01:57:58    
 2018-01-16 01:57:58    
 2018-01-16 01:57:59    
 2018-01-16 01:57:59    
 2018-01-16 01:57:59    
 2018-01-16 01:58:00     
 2018-01-16 01:58:00    
 2018-01-16 01:58:01    
 2018-01-16 01:58:01
 2018-01-16 02:00:00
 2018-01-16 02:45:01    
 2018-01-16 02:45:01    
 2018-01-16 02:45:02    
 2018-01-16 02:45:02    
 2018-01-16 02:45:02    
 2018-01-16 02:45:02    
 2018-01-16 02:45:03    
 2018-01-16 02:45:04     
 2018-01-16 02:45:04    
 2018-01-16 02:45:05    
 2018-01-16 02:45:06    
 2018-01-16 02:45:07    
 2018-01-16 02:45:07    
 2018-01-16 02:45:08    
 2018-01-16 02:58:55    
 2018-01-16 01:57:58    
 2018-01-16 01:57:58    
 2018-01-16 01:57:58    
 2018-01-16 01:57:58    
 2018-01-16 01:57:58    
 2018-01-16 01:57:59    
 2018-01-16 01:57:59    
 2018-01-16 01:57:59    
 2018-01-16 01:58:00     
 2018-01-16 01:58:00    
 2018-01-16 01:58:01    
 2018-01-16 01:58:01
 2018-01-16 02:45:01    
 2018-01-16 02:45:01    
 2018-01-16 02:45:02    
 2018-01-16 02:45:02    
 2018-01-16 02:45:02    
 2018-01-16 02:45:02    
 2018-01-16 02:45:03    
 2018-01-16 02:45:04     
 2018-01-16 02:45:04    
 2018-01-16 02:45:05    
 2018-01-16 02:45:06    
 2018-01-16 02:45:07    
 2018-01-16 02:45:07    
 2018-01-16 02:45:08    
如何删除不在分组/异常时间中的时间,以便如果该时间距离一组时间超过1秒,它将被丢弃。我想得到一个像这样的熊猫数据帧:

 2018-01-16 01:51:10
 2018-01-16 01:57:58    
 2018-01-16 01:57:58    
 2018-01-16 01:57:58    
 2018-01-16 01:57:58    
 2018-01-16 01:57:58    
 2018-01-16 01:57:59    
 2018-01-16 01:57:59    
 2018-01-16 01:57:59    
 2018-01-16 01:58:00     
 2018-01-16 01:58:00    
 2018-01-16 01:58:01    
 2018-01-16 01:58:01
 2018-01-16 02:00:00
 2018-01-16 02:45:01    
 2018-01-16 02:45:01    
 2018-01-16 02:45:02    
 2018-01-16 02:45:02    
 2018-01-16 02:45:02    
 2018-01-16 02:45:02    
 2018-01-16 02:45:03    
 2018-01-16 02:45:04     
 2018-01-16 02:45:04    
 2018-01-16 02:45:05    
 2018-01-16 02:45:06    
 2018-01-16 02:45:07    
 2018-01-16 02:45:07    
 2018-01-16 02:45:08    
 2018-01-16 02:58:55    
 2018-01-16 01:57:58    
 2018-01-16 01:57:58    
 2018-01-16 01:57:58    
 2018-01-16 01:57:58    
 2018-01-16 01:57:58    
 2018-01-16 01:57:59    
 2018-01-16 01:57:59    
 2018-01-16 01:57:59    
 2018-01-16 01:58:00     
 2018-01-16 01:58:00    
 2018-01-16 01:58:01    
 2018-01-16 01:58:01
 2018-01-16 02:45:01    
 2018-01-16 02:45:01    
 2018-01-16 02:45:02    
 2018-01-16 02:45:02    
 2018-01-16 02:45:02    
 2018-01-16 02:45:02    
 2018-01-16 02:45:03    
 2018-01-16 02:45:04     
 2018-01-16 02:45:04    
 2018-01-16 02:45:05    
 2018-01-16 02:45:06    
 2018-01-16 02:45:07    
 2018-01-16 02:45:07    
 2018-01-16 02:45:08    
样本数据:

import pandas as pd

idx = [
    "2018-01-16 01:51:10", "2018-01-16 01:57:58", "2018-01-16 01:57:58", "2018-01-16 01:57:58", "2018-01-16 01:57:58", "2018-01-16 01:57:58", "2018-01-16 01:57:59", "2018-01-16 01:57:59", "2018-01-16 01:57:59", "2018-01-16 01:58:00", "2018-01-16 01:58:00", "2018-01-16 01:58:01", "2018-01-16 01:58:01", "2018-01-16 02:00:00", "2018-01-16 02:45:01", "2018-01-16 02:45:01", "2018-01-16 02:45:02", "2018-01-16 02:45:02", "2018-01-16 02:45:02", "2018-01-16 02:45:02", "2018-01-16 02:45:03", "2018-01-16 02:45:04", "2018-01-16 02:45:04", "2018-01-16 02:45:05", "2018-01-16 02:45:06", "2018-01-16 02:45:07", "2018-01-16 02:45:07", "2018-01-16 02:45:08", "2018-01-16 02:58:55",
]

df = pd.DataFrame(range(len(idx)), index=idx, columns=["col"])
df.index = pd.to_datetime(df.index)
以两个方向的第一个差异为例:

bdiff = np.abs((df.index[1:] - df.index[:-1]).total_seconds())
fdiff = np.abs((df.index[:-1] - df.index[1:]).total_seconds())
现在,每一个元素实际上都太短了
bdiff
排除第一个元素,而
fdiff
排除最后一个元素。所以,让他们:

bdiff = np.insert(bdiff, 0, 99.)
fdiff = np.append(fdiff, 99.)
最后,从这个图中形成一个布尔掩码;掩码为
True
,其中一个值与环绕它的两个值之间的距离超过1秒:

>>> mask = (bdiff > 1.0) & (fdiff > 1.0) 
... print(df.loc[~mask])                                                                                                                                     
                     col
2018-01-16 01:57:58    1
2018-01-16 01:57:58    2
2018-01-16 01:57:58    3
2018-01-16 01:57:58    4
2018-01-16 01:57:58    5
2018-01-16 01:57:59    6
2018-01-16 01:57:59    7
2018-01-16 01:57:59    8
2018-01-16 01:58:00    9
2018-01-16 01:58:00   10
2018-01-16 01:58:01   11
2018-01-16 01:58:01   12
2018-01-16 02:45:01   14
2018-01-16 02:45:01   15
2018-01-16 02:45:02   16
2018-01-16 02:45:02   17
2018-01-16 02:45:02   18
2018-01-16 02:45:02   19
2018-01-16 02:45:03   20
2018-01-16 02:45:04   21
2018-01-16 02:45:04   22
2018-01-16 02:45:05   23
2018-01-16 02:45:06   24
2018-01-16 02:45:07   25
2018-01-16 02:45:07   26
2018-01-16 02:45:08   27

>>> mask                                                                                                                                                     
array([ True, False, False, False, False, False, False, False, False,
       False, False, False, False,  True, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False,  True])