![](/img/trans.png)
[英]efficient way to find the most recent entry in another dataframe for each entry of a dataframe indexed by datetime in pandas
[英]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()
独特的日期时间...
一个方便的选择是使用DatetimeIndex
的get_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.