按CUSIP与年份分组计算月度数据年度平均收益率问题求助
问题出在滚动平均上
你用的rolling(12, 1).mean()是计算滚动12期的移动平均,并非你需要的年度整体平均。这个方法会逐行取当前行及之前11行的窗口计算均值,导致每个月份的结果随窗口移动而变化,完全不符合“同一CUSIP同一年份所有月度记录共享同一个年度平均收益率”的需求。
正确实现代码
直接使用transform('mean')即可,它会为每个分组计算整体均值,并将该均值映射回原DataFrame的对应分组行中,保证同组内所有行的mean_return值一致:
monthly_stock_data['mean_return'] = monthly_stock_data.groupby(by=['CUSIP', 'year'])['RET'].transform('mean')
逻辑说明
- 分组逻辑:通过
CUSIP和year的组合分组,精准定位单只股票单一年份的所有月度数据 transform('mean')的作用:计算每个分组内RET列的平均值,然后将该平均值填充到分组内的每一行,实现同组所有行共享同一年度平均收益率的效果
内容的提问来源于stack exchange,提问作者loyala
相关产品推荐
相关产品推荐

