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

如何基于每日股票收盘价计算周度与月度收益率?

股票周度与月度收益率计算方案

前提准备

首先确保你的Date列(或索引)是datetime类型,如果不是,先执行转换:

import pandas as pd

# 若Date是普通列
table['Date'] = pd.to_datetime(table['Date'])

# 若Date是索引(原始DataFrame格式)
table = table.reset_index()  # 转为重置索引后的格式统一处理
table['Date'] = pd.to_datetime(table['Date'])

周度收益率计算

通过groupby结合pd.Grouper指定周频率(freq='W'),按股票代码和周分组后,用期末收盘价/期初收盘价 - 1计算区间收益率:

# 计算每只股票的周度收益率
weekly_returns = table.groupby(
    ['ticker', pd.Grouper(key='Date', freq='W')]
)['Adj Close'].apply(lambda x: x.iloc[-1] / x.iloc[0] - 1).reset_index(name='Weekly Return')
  • 注:freq='W'默认以周日为周结束日,若需调整为周一结束,可改用freq='W-MON'。

月度收益率计算

将频率参数改为freq='M'(月末节点),即可计算月度收益率:

# 计算每只股票的月度收益率
monthly_returns = table.groupby(
    ['ticker', pd.Grouper(key='Date', freq='M')]
)['Adj Close'].apply(lambda x: x.iloc[-1] / x.iloc[0] - 1).reset_index(name='Monthly Return')
  • 若需以月首为统计节点,可使用freq='MS'。

平均周度/月度收益率计算

如果需要每只股票的平均周度/月度收益率,直接对结果按ticker分组取均值:

# 每只股票的平均周度收益率
mean_weekly_returns = weekly_returns.groupby('ticker')['Weekly Return'].mean()

# 每只股票的平均月度收益率
mean_monthly_returns = monthly_returns.groupby('ticker')['Monthly Return'].mean()

补充说明

  • 采用x.iloc[-1]/x.iloc[0]-1的原因:区间收益率直接用期末与期初的价格比计算,比累加日度收益率更准确,和你之前使用pct_change()的日度收益率逻辑一致。
  • 若DataFrame未重置索引(Date为索引),可将pd.Grouper的参数改为level='Date'替代key='Date',无需重置索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:01:15