gpt4 book ai didi

python - 如何在给定时间间隙的情况下创建基于时间阈值的列?

转载 作者:行者123 更新时间:2023-11-30 22:04:44 27 4
gpt4 key购买 nike

我有一个包含多个列的 pandas 数据框,但出于视觉目的,请考虑列 Idtimestamp。正如您所看到的,pandas 数据框按 Id 列排序。

Id                timestamp

11 2018-10-19 13:00:00
11 2018-10-19 13:05:00
11 2018-10-19 13:06:00
11 2018-10-19 13:07:00
11 2018-10-19 13:30:00
11 2018-10-19 13:31:00
11 2018-10-19 13:32:00
11 2018-10-19 13:55:00
11 2018-10-19 13:54:00
11 2018-10-21 20:47:09
11 2018-10-21 20:48:27
11 2018-10-21 20:48:45
11 2018-10-21 20:48:52
12 2018-10-09 20:30:46
12 2018-10-09 20:30:22
12 2018-10-09 20:30:05
12 2018-10-09 20:29:44
12 2018-10-09 20:29:31
13 2018-10-19 18:49:08
13 2018-10-19 18:49:13
13 2018-10-11 18:46:15
14 2018-10-11 10:46:40
14 2018-10-23 10:39:52

如何根据 10 分钟的时间间隔创建另一个 ID 列?也就是说,为每个时间戳 10 分钟阈值创建一个新的不同的“ID_2:

Id                timestamp            ID_2

11 2018-10-19 13:00:00 01
11 2018-10-19 13:05:00 01
11 2018-10-19 13:06:00 01
11 2018-10-19 13:07:00 01
11 2018-10-19 13:30:00 02
11 2018-10-19 13:31:00 02
11 2018-10-19 13:32:00 02
11 2018-10-19 13:55:00 03
11 2018-10-19 13:54:00 03
11 2018-10-21 20:47:09 04
11 2018-10-21 20:48:27 04
11 2018-10-21 20:48:45 04
11 2018-10-21 20:48:52 04
12 2018-10-09 20:30:46 04
12 2018-10-09 20:30:22 04
12 2018-10-09 20:30:05 04
12 2018-10-09 20:29:44 05
12 2018-10-09 20:29:31 05
13 2018-10-19 18:49:08 06
13 2018-10-19 18:49:13 06
13 2018-10-11 18:46:15 07
14 2018-10-11 10:46:40 07

我尝试按如下方式检测时间间隙:

df['col_new'] = (df['timestamp'].diff()).dt.seconds > 600

但是,我不明白如何应用向后填充来创建 ID。因此,如何检测时间间隙并为其分配新的 id?

最佳答案

我相信你需要floorfactorize ,最后添加zfill :

df['timestamp'] = pd.to_datetime(df['timestamp'])

a = pd.factorize(df['timestamp'].dt.floor('10Min'))[0] + 1
df['col_new'] = pd.Series(a, index=df.index).astype(str).str.zfill(2)

print (df)
Id timestamp ID_2 col_new
0 11 2018-10-19 13:00:00 01 01
1 11 2018-10-19 13:05:00 01 01
2 11 2018-10-19 13:06:00 01 01
3 11 2018-10-19 13:07:00 01 01
4 11 2018-10-19 13:30:00 02 02
5 11 2018-10-19 13:31:00 02 02
6 11 2018-10-19 13:32:00 02 02
7 11 2018-10-19 13:55:00 03 03
8 11 2018-10-19 13:54:00 03 03
9 11 2018-10-21 20:47:09 04 04
10 11 2018-10-21 20:48:27 04 04
11 11 2018-10-21 20:48:45 04 04
12 11 2018-10-21 20:48:52 04 04
13 12 2018-10-09 20:30:46 04 05
14 12 2018-10-09 20:30:22 04 05
15 12 2018-10-09 20:30:05 04 05
16 12 2018-10-09 20:29:44 05 06
17 12 2018-10-09 20:29:31 05 06
18 13 2018-10-19 18:49:08 06 07
19 13 2018-10-19 18:49:13 06 07
20 13 2018-10-11 18:46:15 07 08
21 14 2018-10-11 18:46:40 07 08

详细信息:

print (df['timestamp'].dt.floor('10Min'))
0 2018-10-19 13:00:00
1 2018-10-19 13:00:00
2 2018-10-19 13:00:00
3 2018-10-19 13:00:00
4 2018-10-19 13:30:00
5 2018-10-19 13:30:00
6 2018-10-19 13:30:00
7 2018-10-19 13:50:00
8 2018-10-19 13:50:00
9 2018-10-21 20:40:00
10 2018-10-21 20:40:00
11 2018-10-21 20:40:00
12 2018-10-21 20:40:00
13 2018-10-09 20:30:00
14 2018-10-09 20:30:00
15 2018-10-09 20:30:00
16 2018-10-09 20:20:00
17 2018-10-09 20:20:00
18 2018-10-19 18:40:00
19 2018-10-19 18:40:00
20 2018-10-11 18:40:00
21 2018-10-11 18:40:00
Name: timestamp, dtype: datetime64[ns]

关于python - 如何在给定时间间隙的情况下创建基于时间阈值的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53186476/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com