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

2024-04-30 04:01:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含多个列的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\u 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?你知道吗


Tags: 数据idpandasdfnew间隔排序时间
1条回答
网友
1楼 · 发布于 2024-04-30 04:01:48

我相信你需要^{}加上^{},最后加上^{}

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]

相关问题 更多 >