Python 从两个系列中获取最接近给定时间戳的日期

Python 从两个系列中获取最接近给定时间戳的日期,python,pandas,datetime,Python,Pandas,Datetime,我有一系列时间戳,称为日期,看起来是这样的: 1 2021-04-21 09:34:00+00:00 2 2021-04-21 10:30:02+00:00 3 2021-04-21 15:54:00+00:00 4 2021-04-22 18:33:57+00:00 5 2021-04-23 18:48:04+00:00 我试图从另一个名为PublishTime的系列中找到最近的日期,该系列包含6天时间段的分钟数据,涵盖了一些时间戳。日期必须在时间戳之后,不能在时间戳之前

我有一系列时间戳,称为
日期
,看起来是这样的:

1   2021-04-21 09:34:00+00:00
2   2021-04-21 10:30:02+00:00
3   2021-04-21 15:54:00+00:00
4   2021-04-22 18:33:57+00:00
5   2021-04-23 18:48:04+00:00
我试图从另一个名为
PublishTime
的系列中找到最近的日期,该系列包含6天时间段的分钟数据,涵盖了一些时间戳。日期必须在时间戳之后,不能在时间戳之前。例如:

0   2021-04-21 09:30:00
1   2021-04-21 09:31:00
2   2021-04-21 09:32:00
3   2021-04-21 09:33:00
4   2021-04-21 09:34:00
有没有简单的方法可以快速找到最近的日期?我查看了
datetime
模块,但找不到答案

编辑
我错误地说日期列包含了所有的时间戳。在我试图将其与之匹配的第二个系列中,没有周末和非营业时间的分钟数据,因此我希望在时间戳之后找到最近的日期,而不是之前。

谢谢@Quang Hoang,merge\u asof worked。因为它对我来说也是新的,所以我尝试了一下,结果如下

首先从问题中获取df,并重新格式化类型以匹配“PublishTime”系列中的类型

获取发布时间序列中的df

df = pd.DataFrame({'dates': ["2021-04-21 09:34:00+00:00", "2021-04-21 10:30:02+00:00", "2021-04-21 15:54:00+00:00", "2021-04-22 18:33:57+00:00", "2021-04-23 18:48:04+00:00"]})
df['dates'] = pd.to_datetime(df['dates'])
df['dates'] = df['dates'].dt.strftime('%Y-%m-%d %H:%M:%S')
df['dates'] = pd.to_datetime(df['dates'])
df

dates
0   2021-04-21 09:34:00
1   2021-04-21 10:30:02
2   2021-04-21 15:54:00
3   2021-04-22 18:33:57
4   2021-04-23 18:48:04
df2 = pd.DataFrame({'PublishTime': ["2021-04-21 09:33:00", "2021-04-21 09:34:00", "2021-04-21 09:35:00", "2021-04-21 10:31:00", "2021-04-21 15:56:00", "2021-04-25 15:56:00", "2021-04-26 15:56:00"]})
df2['PublishTime'] = pd.to_datetime(df2['PublishTime'])
df2

PublishTime
0   2021-04-21 09:33:00
1   2021-04-21 09:34:00
2   2021-04-21 09:35:00
3   2021-04-21 10:31:00
4   2021-04-21 15:56:00
5   2021-04-25 15:56:00
6   2021-04-26 15:56:00
最后,合并asof并使用
向前
作为方向

pd.merge_asof(df, df2, left_on='dates', right_on='PublishTime', direction='forward')

     dates                  PublishTime
0   2021-04-21 09:34:00 2021-04-21 09:34:00
1   2021-04-21 10:30:02 2021-04-21 10:31:00
2   2021-04-21 15:54:00 2021-04-21 15:56:00
3   2021-04-22 18:33:57 2021-04-25 15:56:00
4   2021-04-23 18:48:04 2021-04-25 15:56:00

如您所见,在PublishTime系列中,我没有添加4月22日至24日的数据,以显示某些数据可能丢失(如周末),然后在25日进行下一个最近的数据。

如果另一个系列每分钟都有行,那么这是否意味着您要使用将日期向上/向下舍入到最近的一分钟?不需要新的序列,要做到这一点,你可以点击这个链接,你可以使用get_loc和方法'nearest'选项尝试搜索
merge\u asof
@ShubhamPeriwal我已经做了一些编辑,我很抱歉。我似乎收到了这个错误:pandas.errors.MergeError:不兼容的合并键[0]datetime64[ns,UTC]和dtype('注意我如何在我的代码的第一部分更改了
df
dates格式您会得到这个错误,因为df是UTC,但发布时间不是。所以我转换了df格式