如何用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()
结果验证
运行上面的代码后,你会得到这样的结果:
| datetime | price | window_min_price |
|---|---|---|
| 1900-01-01 08:03:00 | 15 | 15.0 |
| 1900-01-01 08:04:00 | 12 | 12.0 |
| 1900-01-01 08:05:00 | 18 | 12.0 |
| 1900-01-01 08:06:00 | 14 | 12.0 |
| 1900-01-01 08:07:00 | 10 | 10.0 |
为什么之前的方法不对?
- 如果你的代码返回了窗口最后一行的价格,大概率是用了
.last()而不是.min(); - 如果返回了整列最小值,那是直接调用了
df['price'].min(),没有结合rolling()窗口来限定计算范围。
如果你的datetime列是DataFrame的索引,代码逻辑也是一样的,只需要把df['price']换成对应的列名即可。
内容的提问来源于stack exchange,提问作者Giladbi
相关产品推荐
相关产品推荐

