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])