如何在Pandas中按分组获取N天后的实际股票价格
如何用Pandas获取每条股票记录N天后的实际价格?
核心思路
要实现这个需求,关键是基于日期精准匹配(避免因节假日、缺失数据用行偏移导致的误差),通过日期运算+表连接的方式完成匹配。
具体实现代码
假设你的DataFrame名为df,目标天数N=30:
- 转换日期格式:先把字符串类型的
date列转为Pandas datetime类型,才能进行日期运算
import pandas as pd # 转换日期列(匹配你的数据格式:日/月/年) df['date'] = pd.to_datetime(df['date'], format='%d/%m/%y')
- 计算目标日期:为每条记录生成N天后的目标日期
N = 30 df['target_date'] = df['date'] + pd.Timedelta(days=N)
- 合并匹配未来价格:将原DataFrame与自身按
ticker和target_date左连接,获取对应日期的价格
# 准备用于匹配的辅助数据集:保留关键列并重命名 price_lookup = df[['ticker', 'date', 'price']].rename( columns={'date': 'target_date', 'price': 'future_price'} ) # 左连接保留所有原始记录,N天后无数据则显示NaN result = df.merge(price_lookup, on=['ticker', 'target_date'], how='left')
可选简化方案(仅适用于日期连续场景)
如果你的股票数据是每日连续无缺失的(每个交易日都有记录),可以用groupby+shift快速实现:
# 先按股票代码和日期排序 df = df.sort_values(['ticker', 'date']) # 按股票分组后,取30行后的价格(对应N天后的记录) df['future_price'] = df.groupby('ticker')['price'].shift(-N)
内容的提问来源于stack exchange,提问作者Alessandro Ceccarelli
相关产品推荐
相关产品推荐

