如何基于股票日度收盘价使用Python计算个股月度收益率
日度股票数据转月度收益率实现方法
你之前调用table.groupby('month')未得到预期结果,核心原因有两个:
- 生成的宽表
table中仅包含Date字段和各股票的调整收盘价列,未提前生成month分组维度 - 月度收益率需要基于每月固定时点(通常是月末/月初交易日)的收盘价计算,不能直接对日度价格做普通分组聚合
你运行代码得到的日度调整收盘价宽表结构如下:
具体实现代码
在你原有代码的末尾追加以下代码即可:
# 转换日期格式,设置为索引以支持时间重采样 table['Date'] = pd.to_datetime(table['Date']) table = table.set_index('Date') # 按自然月重采样,取每个月最后一个交易日的收盘价 monthly_close = table.resample('M').last() # 计算环比月度收益率,删除首行空值 monthly_return = monthly_close.pct_change().dropna() # 若需要显式生成月份字段用于分组,可重置索引后添加 monthly_return = monthly_return.reset_index() monthly_return['month'] = monthly_return['Date'].dt.to_period('M')
可选调整说明
- 如果你需要以每月第一个交易日的收盘价为基准计算收益率,将
resample('M').last()替换为resample('M').first()即可 - 上述代码计算的是简单收益率,公式为
(当月收盘价/上月收盘价)-1;如果需要计算对数收益率,可将收益率计算行替换为monthly_return = np.log(monthly_close / monthly_close.shift(1)).dropna() - 如果需要按年+月维度分组统计其他指标,直接基于生成的
month字段调用groupby('month')即可正常使用
内容的提问来源于stack exchange,提问作者ASH
相关产品推荐
相关产品推荐

