1 回答
TA贡献1810条经验 获得超4个赞
您的时间列表不是一种理想的格式,因此我将向您展示一个日期的方法,其中数据框h23是手动构建的。如果需要,您可以对其进行编码以构建一个包含所有时间的数据框。
基本前提是制作一个数据框h23,例如包含照片的所有时间戳。使用它与 df 时间戳合并,使用pd.merge_asof它可以进行最接近的时间匹配。 nearest意味着实际时间可以是之前或之后,但是如果时间需要是事件之前的最近时间,则还有 和 的backward选项。forward
import pandas as pd
df = 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_2
0 2019-06-23 07:00:00 2019-06-23 07:00:00 0.124 0.431
1 2019-06-23 08:00:00 2019-06-23 07:09:00 0.164 0.441
2 2019-06-23 09:32:00 2019-06-23 07:09:00 0.164 0.441
3 2019-06-23 10:14:00 2019-06-23 07:09:00 0.164 0.441
4 2019-06-23 11:15:00 2019-06-23 07:09:00 0.164 0.441
5 2019-06-23 12:17:00 2019-06-23 07:09:00 0.164 0.441
6 2019-06-23 13:03:00 2019-06-23 07:09:00 0.164 0.441
7 2019-06-23 14:41:00 2019-06-23 07:09:00 0.164 0.441
8 2019-06-23 15:04:00 2019-06-23 07:09:00 0.164 0.441
9 2019-06-23 17:05:00 2019-06-23 07:09:00 0.164 0.441
添加回答
举报