![](/img/trans.png)
[英]Efficient way to get row with closest timestamp to a given datetime in pandas
[英]Get date that is closest to given timestamp from two series python pandas
我有一系列稱為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
模塊,但找不到答案。
編輯我錯誤地說日期列涵蓋了所有時間戳。 在我試圖與之匹配的第二個系列中,沒有周末和非營業時間的分鍾數據,因此我想在時間戳之后找到最接近的日期,而不是之前。
感謝@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
獲取 PublishTime 系列中的 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
最后,merge_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 日使用了下一個最接近的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.