首页 > 解决方案 > 在python df中获取所有具有最新前一个时间戳的行

问题描述

我有一个带有 datetime64time列的 df。给定一个 timestamp t,我希望能够获得所有time最接近但之前的行t

目前,我创建了一个排序列表time(删除了重复项),从该列表中获取第一个时间戳,然后选择具有此时间戳的所有行。

有没有更好的方法(即矢量化操作)来做到这一点?

例如,给定以下数据框t = 1/1/1980 2:00:59,我想返回pd.DataFrame([Timestamp('1/1/1980 2:00:00'),2],[Timestamp('1/1/1980 2:00:00'),2])

时间 一些数据
1980 年 1 月 1 日 1:00:00 1
1/1/1980 2:00:00 2
1/1/1980 2:00:00 3
1/1/1980 2:01:00 4

标签: pythonpandasdataframe

解决方案


我对日期不是很好,但这里有一个可能对你有用的解决方案:

from datetime import datetime
import pandas as pd

df = pd.DataFrame({'time':['1/1/1980 1:00:00','1/1/1980 2:00:00','1/1/1980 2:01:00']})

这将给出以下 DataFrame

0   1980-01-01 01:00:00
1   1980-01-01 02:00:00
2   1980-01-01 02:01:00
Name: time, dtype: datetime64[ns]
target = datetime.strptime('1/1/1980 2:00:03', '%d/%m/%Y %H:%M:%S')

def nearest(df,t):
    return df.iloc[df.apply(lambda x: abs(x - t)).idxmin()]

df = df.time.apply(lambda x:datetime.strptime(x,'%d/%m/%Y %H:%M:%S'))

nearest(df,target)

输出

Timestamp('1980-01-01 02:00:00')

推荐阅读