You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python实现:获取DataFrame中每行时间提前20秒对应的最近价格值

Python实现:获取DataFrame中每行时间提前20秒对应的最近价格值

嘿,这个需求我之前处理过类似的,用pandas的索引相关功能就能轻松实现,我给你一步步拆解具体怎么做:

核心思路

我们的目标是给每行数据找到当前时间往前推20秒这个时间点附近,最接近的那条记录的价格。利用pandas的datetime索引特性,我们可以先计算出每行对应的目标时间,再通过索引匹配找到最近的记录位置,最后提取对应价格即可。

具体步骤&代码示例

首先,先确保你的DataFrame索引是标准的datetime类型(如果还没转换的话),然后按照下面的步骤来:

  1. 构造样本数据(和你给出的示例一致):
import pandas as pd

data = {
    'price': [1.880, 1.900, 1.880, 1.890, 1.870, 1.890, 1.900, 1.930, 1.880, 1.890,
              1.880, 1.900, 1.890, 1.910, 1.890, 1.860, 1.840, 1.850, 1.880, 1.910, 1.920]
}
index = pd.to_datetime([
    '2024-02-01 10:03:39.483', '2024-02-01 10:03:40.540', '2024-02-01 10:03:41.550',
    '2024-02-01 10:03:43.563', '2024-02-01 10:03:45.567', '2024-02-01 10:03:45.583',
    '2024-02-01 10:03:46.590', '2024-02-01 10:03:48.620', '2024-02-01 10:03:50.627',
    '2024-02-01 10:03:51.630', '2024-02-01 10:03:53.647', '2024-02-01 10:03:55.753',
    '2024-02-01 10:03:59.367', '2024-02-01 10:04:02.497', '2024-02-01 10:04:04.543',
    '2024-02-01 10:04:05.550', '2024-02-01 10:04:07.577', '2024-02-01 10:04:08.157',
    '2024-02-01 10:04:10.197', '2024-02-01 10:04:11.887', '2024-02-01 10:04:13.163'
])
df = pd.DataFrame(data, index=index)
  1. 计算每行对应的“20秒前”目标时间:
# 给每个索引时间减去20秒,得到我们要匹配的目标时间数组
target_times = df.index - pd.Timedelta(seconds=20)
  1. 找到每个目标时间在原索引中最接近的位置:
# 使用get_indexer,method='nearest'表示找最近的索引匹配
indices = df.index.get_indexer(target_times, method='nearest')
  1. 提取对应位置的价格,生成新列:
df['price_20s_ago_nearest'] = df['price'].iloc[indices].values

关键说明

  • get_indexermethod='nearest'参数会自动帮我们找到距离目标时间最近的那条记录,不管目标时间是在原索引记录的前面还是后面,完全符合你要的“最近价格”需求。
  • 如果20秒前的时间点超出了数据集的时间范围(比如最早的几条记录),get_indexer会返回0(也就是第一条记录的索引),你可以根据需要调整这种边界情况的处理逻辑。

示例输出

运行完上面的代码后,你的DataFrame就会新增一列price_20s_ago_nearest,比如对于2024-02-01 10:04:02.497这条记录,20秒前是2024-02-01 10:03:42.497,最接近的是2024-02-01 10:03:41.550对应的价格1.880,新列就会填入这个值。

备注:内容来源于stack exchange,提问作者João Weckerle

火山引擎 最新活动