You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas/Python获取指定时间窗口内价格列的最小值

解决基于滑动窗口的价格最小值计算问题

嘿,我完全懂你的困扰——你想根据datetime列设定的窗口大小(1/2/3等),算出对应窗口内价格列的最小值,但之前的尝试要么只拿到了窗口最后一行的价格,要么直接返回了整列的最小值,没得到你想要的窗口内结果对吧?

先给你一个清晰的解决方案,用Python的pandas来实现,这是处理这类时间序列窗口计算最常用的工具:

步骤1:准备示例数据

首先我们先构造和你需求匹配的示例数据(你可以替换成自己的真实数据):

import pandas as pd

# 模拟你的数据结构
data = {
    'datetime': ['08:03:00', '08:04:00', '08:05:00', '08:06:00', '08:07:00'],
    'price': [15, 12, 18, 14, 10]
}
df = pd.DataFrame(data)
# 把datetime列转换成时间格式,确保后续窗口计算的正确性
df['datetime'] = pd.to_datetime(df['datetime'])

步骤2:计算滑动窗口最小值

核心就是用rolling()方法指定窗口大小,然后调用.min()来计算窗口内的最小值:

# 设定你需要的窗口大小,比如3
window_size = 3

# 新增一列存储窗口内的价格最小值
# min_periods=1 表示即使窗口未满(比如前2行窗口大小不够3),也计算已有行的最小值
# 如果你只想要窗口完全填满时的结果,可以去掉min_periods参数
df['window_min_price'] = df['price'].rolling(window=window_size, min_periods=1).min()

结果验证

运行上面的代码后,你会得到这样的结果:

datetimepricewindow_min_price
1900-01-01 08:03:001515.0
1900-01-01 08:04:001212.0
1900-01-01 08:05:001812.0
1900-01-01 08:06:001412.0
1900-01-01 08:07:001010.0

为什么之前的方法不对?

  • 如果你的代码返回了窗口最后一行的价格,大概率是用了.last()而不是.min();
  • 如果返回了整列最小值,那是直接调用了df['price'].min(),没有结合rolling()窗口来限定计算范围。

如果你的datetime列是DataFrame的索引,代码逻辑也是一样的,只需要把df['price']换成对应的列名即可。

内容的提问来源于stack exchange,提问作者Giladbi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:01:14