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

如何获取指定日期对应的前一日收盘价?

获取指定日期前一日收盘价的正确实现方法

问题背景

现有如下股票行情DataFrame:

timestamp    open    high     low  close      volume
0   2023-01-03  3.5000  3.5972  3.3700  3.500     25231.0
1   2023-01-04  3.5000  3.5500  3.3000  3.505     40815.0
2   2023-01-05  3.5800  3.5800  3.4200  3.450     23833.0
3   2023-01-06  3.4500  3.5400  3.4300  3.500     12298.0
4   2023-01-09  3.5200  4.1500  3.4500  4.150     84826.0
5   2023-01-10  4.1800  4.1800  3.9000  4.010     26032.0
6   2023-01-11  4.1000  4.1000  3.9000  4.000     34807.0
7   2023-01-12  3.9900  4.4200  3.9500  4.190     39737.0
8   2023-01-13  4.4700  4.7500  4.3250  4.540     70672.0
9   2023-01-17  4.8100  5.4000  4.7100  4.780    213792.0
10  2023-01-18  4.6700  4.7475  4.3300  4.380     60063.0
11  2023-01-19  4.3400  4.6100  4.3400  4.420     29150.0
12  2023-01-20  4.3600  4.4400  4.3000  4.300     22088.0
13  2023-01-23  4.2500  4.3242  4.1118  4.150     25304.0
14  2023-01-24  4.2115  4.2499  4.1400  4.170     11240.0
15  2023-01-25  4.3050  4.5000  4.1700  4.220     35726.0
16  2023-01-26  4.2500  4.3000  3.8400  3.980     29257.0
17  2023-01-27  3.8800  4.0200  3.7400  3.770     47719.0
18  2023-01-30  3.7700  3.8700  3.4000  3.480     42704.0
19  2023-01-31  3.4000  3.6599  3.3100  3.570    275723.0
20  2023-02-01  3.4900  3.6500  3.4900  3.600     10763.0
21  2023-02-02  3.7500  3.7800  3.6300  3.750     51914.0
22  2023-02-03  3.7900  3.8899  3.6500  3.790     21763.0
23  2023-02-06  3.9000  4.0600  3.6500  3.700     37767.0
24  2023-02-07  3.7400  3.8500  3.5000  3.660     18919.0
25  2023-02-08  3.6900  3.6900  3.5500  3.610      7878.0
26  2023-02-09  3.6000  3.6000  3.5000  3.560      8594.0
27  2023-02-10  3.5000  3.5500  3.3102  3.420     34729.0
28  2023-02-13  3.4800  3.4800  3.1750  3.300    100681.0
29  2023-02-14  3.2800  3.3400  3.1300  3.180     76240.0
30  2023-02-15  3.2400  3.3000  3.1700  3.290     32600.0
31  2023-02-16  3.4400  3.8800  3.3000  3.880    133655.0
32  2023-02-17  3.9200  4.4300  3.9200  4.350    149117.0
33  2023-02-21  6.5300  7.6100  6.0600  6.400  40559286.0

已通过new_df = df.loc[df["timestamp"] == datetime.date(2023,2,21).strftime("%Y-%m-%d")]获取到2023-02-21的行数据,但尝试用new_df.shift(-1).close获取前一日收盘价失败,需正确实现方式。

错误原因

new_df是仅包含目标日期的单行DataFrame,调用shift(-1)会返回空值——因为单行数据没有"下一行",而我们需要的是原完整DataFrame中目标行的前一行数据,而非截取后的单行数据内的偏移。

正确实现方法

方法一:通过索引定位

先获取目标日期对应的行索引,直接取索引减1的close值:

import datetime
import pandas as pd

# 定义目标日期字符串
target_date_str = datetime.date(2023, 2, 21).strftime("%Y-%m-%d")
# 获取目标行的索引(假设日期唯一)
target_index = df[df["timestamp"] == target_date_str].index[0]
# 获取前一日收盘价
previous_close = df.loc[target_index - 1, "close"]

方法二:将日期设为索引后使用shift

先把timetamp转为datetime类型并设置为索引,利用shift(1)偏移获取前一行数据:

# 转换timestamp列为datetime类型
df["timestamp"] = pd.to_datetime(df["timestamp"])
# 设置为索引
df.set_index("timestamp", inplace=True)

# 获取目标日期的前一日收盘价
previous_close = df.shift(1).loc["2023-02-21", "close"]

方法三:直接查找前一个交易日的日期

由于股市存在休市(如周末),若需精准匹配前一个交易日而非日历前一天,可先计算前一个交易日的日期再查询:

from pandas.tseries.offsets import BDay

# 计算前一个交易日的日期
prev_trading_day = datetime.date(2023, 2, 21) - BDay(1)
prev_trading_day_str = prev_trading_day.strftime("%Y-%m-%d")

# 查询该日期的收盘价
previous_close = df.loc[df["timestamp"] == prev_trading_day_str, "close"].values[0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:12:15