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

基于时间序列收益率计算股票远期权重的Pandas实现咨询

解决方案

核心实现逻辑为:对齐两个数据框的日期和股票代码维度,按个股分组递推计算每日权重,最终转换为要求的「日期+股票代码」双维度长表格式,完整代码如下:

import pandas as pd
import numpy as np

# 1. 读取并预处理原始数据
# 收益率数据:默认包含Ticker、DateTime、日度收益率三列,收益率列名可根据实际情况调整
df_res = pd.read_csv("df.csv", sep=",", header=0)
df_res['DateTime'] = pd.to_datetime(df_res['DateTime']) # 统一日期格式避免匹配错误
df_res = df_res.sort_values(['Ticker', 'DateTime']).reset_index(drop=True)

# 期初权重数据:读取2020-06-30的初始权重
header_list = ["Ticker", "Weight", "dDate"]
dfWorker = pd.read_csv('WORKERCOW.csv', sep=",", header=None, names=header_list)
dfWorker['dDate'] = pd.to_datetime(dfWorker['dDate'])

# 2. 按规则递推计算每日权重
weight_result = []
# 先加入6月30日的期初权重作为初始值
weight_result.append(dfWorker.rename(columns={'dDate':'DateTime'})[['DateTime', 'Ticker', 'Weight']])

# 按个股分组计算后续每日权重
for ticker, return_group in df_res.groupby('Ticker'):
    # 取当前个股的期初权重
    init_w = dfWorker.loc[dfWorker['Ticker'] == ticker, 'Weight'].values[0]
    # 按规则计算:weight[t] = weight[t-1] * return[t],如果实际规则是权重乘(1+涨跌幅),把return替换为(1+return)即可
    return_group['Weight'] = init_w * (return_group['return'].cumprod())
    weight_result.append(return_group[['DateTime', 'Ticker', 'Weight']])

# 3. 合并结果并排序得到最终数据框
final_df = pd.concat(weight_result, ignore_index=True)
final_df = final_df.sort_values(['DateTime', 'Ticker']).reset_index(drop=True)

# 输出查看结果
print(final_df)

注意事项

  • 上述代码中收益率的列名默认是return,如果你的df_res里收益率列是其他名称,自行替换即可
  • 如果权重计算的实际规则是「前一日权重 * (1+当日涨跌幅)」,把cumprod行的return_group['return']改成(1+return_group['return'])即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:42:00