python - 在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 |
解决方案
我对日期不是很好,但这里有一个可能对你有用的解决方案:
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')
推荐阅读
- c - CMake 构建可执行文件时未定义和重复的符号。Fortran77 C 混合
- mysql - Dart Angular 和 mySql
- javascript - React:main.js 和 index.js 基本一样吗?
- python - 有没有办法在 python 中矢量化 Renko 计算?
- php - php:对谷歌云存储删除操作使用批处理
- javascript - 为什么反应应用程序无法正确加载本地图像
- r - 分组有序行号
- ocr - Tesseract OCR 无法识别 ^ Circumflex
- postgresql - 从我的 API POST 中获取未处理的 Promise Rejection
- gmail-api - 如何为 GMail API 手动创建 JSON 对象(“消息”对象)