繁体   English   中英

在 Pandas dataframe 中查找最近 DateTime 的索引

[英]Find index of most recent DateTime in Pandas dataframe

我有一个 dataframe,其中包括一列日期时间、过去和未来。 有没有办法找到最近日期时间的索引?

不能假设每个日期时间都是唯一的,也不能假设它们是有序的。

如果最近的日期时间不是唯一的,则应返回所有相关的索引。

import pandas as pd
from datetime import datetime as dt

df = pd.read_excel('file.xlsx')
# Create datetime column
df['datetime'] = pd.to_datetime(df['Date'].astype(str) + ' ' + df['Time'].astype(str))
print(df['datetime'])

Out[1]: 
0   2021-02-13 09:00:00
1   2021-02-13 11:00:00
2   2021-02-13 12:00:00
3   2021-02-13 15:00:00
4   2021-02-13 18:00:00
5   2021-02-13 16:45:00
6   2021-02-13 19:00:00
7   2021-02-13 19:00:00
8   2021-02-13 20:30:00
9   2021-02-14 01:30:00
Name: datetime, dtype: datetime64[ns]

对于排除未来的日期,您可以与今天的日期进行比较,然后将它们过滤掉,然后取idxmax

df.loc[(pd.to_datetime('today').day -df['datetime'].dt.day).ge(0),'datetime'].idxmax()

独特的日期时间...

一个方便的选择是使用DatetimeIndexget_loc方法。 前任:

import pandas as pd

df = pd.DataFrame({'datetime': pd.to_datetime(['2021-01-01', '2021-02-01', '2021-02-14'])})

# today is 2021-2-13, so most recent would be 2021-2-1:
pd.DatetimeIndex(df['datetime']).get_loc(pd.Timestamp('now'), method='pad')
# 1

您还可以将日期时间列设置为索引,将上述简化为df.index.get_loc(pd.Timestamp('now'), method='pad')


日期时间列中的重复项...

上面显示的日期时间索引方法在这里不起作用。 相反,您可以先获取值,然后获取索引:

df = pd.DataFrame({'datetime': pd.to_datetime(['2021-02-01', '2021-01-01', '2021-02-01', '2021-02-14'])})

# most recent datetime would be 2021-2-1 at indices 0 and 2
mr_date = df['datetime'].loc[(df['datetime'] - pd.Timestamp('now') <= pd.Timedelta(0))].max()
mr_idx = df.index[df['datetime'] == mr_date]

mr_idx
# Int64Index([0, 2], dtype='int64')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM