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

2024-09-28 05:44:32 发布

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

我有一系列名为dates的时间戳,看起来是这样的:

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模块,但找不到答案

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


Tags: 模块数据方法答案编辑datetime错误时间
1条回答
网友
1楼 · 发布于 2024-09-28 05:44:32

谢谢@Quang Hoang,merge_asof工作了。因为它对我来说也是新的,所以我尝试了一下,结果如下

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

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

获取发布时间序列中的df

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并使用forward作为方向

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日进行了下一次最接近的数据

相关问题 更多 >

    热门问题