根据最接近的小时和日期选择行

我有两种数据,一种是数据帧,一种是现在许多列表包含有关图像采集时间的数据,因此数据如下所示:


pandas 数据框(日期和时间为 23/6 -04/07,每天 07:00-17:00):


>>>timestamp                    date             hour        person_1   person_2 ............

0 2019-06-23 07:00:00          2019-06-23       07:00:00     0.124      0.431

1 2019-06-23 07:03:00          2019-06-23       07:03:00     0.131      0.438

2 2019-06-23 07:06:00          2019-06-23       07:06:00     0.154      0.433

3 2019-06-23 07:09:00          2019-06-23       07:09:00     0.164      0.441

....

2 2019-07-04 16:57:00          2019-07-04       16:57:00     0.864      0.675

3 2019-07-04 17:00:00          2019-07-04       17:00:00     0.823      0.631

每张图像拍摄的时间以列表的格式(“小时”一词后面的数字代表日期):


#Hours that the image was taken

Hours23=['07:00','08:00','09:32','10:14','11:15','12:17','13:03','14:41','15:04','17:05']

Hours24=['07:00','08:13','09:02','10:09','11:02','12:03','14:09','16:00','17:00']

Hours25=['08:15','09:02','10:02','11:02','12:02','14:02','15:02','16:00','17:00']

...

Hours3=['07:00','08:02','09:02','10:02','11:02','12:02','13:03','14:03','15:02','16:01','17:00']

Hours4=['07:15','08:02','12:02','13:03']

我想根据这些小时列表选择数据框中的行,例如,选择最接近图像的小时的行。例如,对于 23/6,图像的第一个小时是 07:00,然后是 08:00,然后是 09:32...

所以我想在我的数据框中仅包含该时间最接近的行到图像小时。

我看到有多种方法可以过滤它,正如这里提到的(在 Pandas 中查找最接近给定时间的 DataFrame 行),但我想考虑到每个日期都有不同的时间这一事实。


所以结果应该是这样的:


>>>timestamp                    date             hour        person_1   person_2 ............

0 2019-06-23 07:00:00          2019-06-23       07:00:00     0.124      0.431

1 2019-06-23 08:01:00          2019-06-23       07:00:00     0.108      0.370

1 2019-06-23 09:32:00          2019-06-23       07:00:00     0.101      0.360

...


蝴蝶刀刀
浏览 58回答 1
1回答

蝴蝶不菲

您的时间列表不是一种理想的格式,因此我将向您展示一个日期的方法,其中数据框h23是手动构建的。如果需要,您可以对其进行编码以构建一个包含所有时间的数据框。基本前提是制作一个数据框h23,例如包含照片的所有时间戳。使用它与 df 时间戳合并,使用pd.merge_asof它可以进行最接近的时间匹配。 nearest意味着实际时间可以是之前或之后,但是如果时间需要是事件之前的最近时间,则还有 和 的backward选项。forwardimport pandas as pddf = pd.DataFrame({'timestamp': {0: '2019-06-23 07:00:00',  1: '2019-06-23 07:03:00',  2: '2019-06-23 07:06:00',  3: '2019-06-23 07:09:00'}, 'date': {0: '2019-06-23', 1: '2019-06-23', 2: '2019-06-23', 3: '2019-06-23'}, 'hour': {0: '07:00:00', 1: '07:03:00', 2: '07:06:00', 3: '07:09:00'}, 'person_1': {0: 0.124, 1: 0.131, 2: 0.154, 3: 0.16399999999999998}, 'person_2': {0: 0.431, 1: 0.43799999999999994, 2: 0.433, 3: 0.441}})df['timestamp'] = pd.to_datetime(df['timestamp'])Hours23=['07:00','08:00','09:32','10:14','11:15','12:17','13:03','14:41','15:04','17:05']h23 = pd.DataFrame({'Time':Hours23, 'Day':'2019-06-23'})h23['timestamp'] = pd.to_datetime(h23['Day'] + " " + h23['Time'])pd.merge_asof(h23,df, on='timestamp', direction='nearest').drop(columns=['Day','Time'])输出              timestamp      date       hour    person_1    person_20   2019-06-23 07:00:00 2019-06-23  07:00:00    0.124   0.4311   2019-06-23 08:00:00 2019-06-23  07:09:00    0.164   0.4412   2019-06-23 09:32:00 2019-06-23  07:09:00    0.164   0.4413   2019-06-23 10:14:00 2019-06-23  07:09:00    0.164   0.4414   2019-06-23 11:15:00 2019-06-23  07:09:00    0.164   0.4415   2019-06-23 12:17:00 2019-06-23  07:09:00    0.164   0.4416   2019-06-23 13:03:00 2019-06-23  07:09:00    0.164   0.4417   2019-06-23 14:41:00 2019-06-23  07:09:00    0.164   0.4418   2019-06-23 15:04:00 2019-06-23  07:09:00    0.164   0.4419   2019-06-23 17:05:00 2019-06-23  07:09:00    0.164   0.441
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python