我确信我需要使用某种应用功能,但我很难创建一个实现此功能的应用程序。我有一个数据与股票报价和每月的回报。我需要计算3个月的远期回报。它的结构是这样的,每个月都会有500行(按这个数字加起来),其中包含所有股票和当月的回报。我一直在尝试像这样的东西,但不起作用。
mr['Quarterly_Returns'] = mr.groupby('ticker')['monthly_returns'].apply(mr['monthly_returns']+mr['monthly_returns'].shift(-1)+mr['monthly_returns'].shift(-2)) 还有建议?
发布于 2016-11-20 21:23:57
您需要lambda x,而在apply中,列名使用x,因为它只适用于列monthly_returns
mr['Quarterly_Returns'] = mr.groupby('ticker')['monthly_returns']
.apply(lambda x: x+x.shift(-1)+x.shift(-2))发布于 2016-11-20 21:44:02
您还可以考虑使用rolling函数。
mr.groupby('ticker')['monthly_returns'].rolling(3).sum()
一个更完整的例子:
df=pd.concat([pd.DataFrame(index=pd.date_range('1/1/2016','12/31/2016',freq='M'),data={'ticker':x,'return':np.random.rand(12)}) for x in list('ABCD')])
df.groupby('ticker')['return'].rolling(3).sum().unstack('ticker')
ticker A B C D
2016-01-31 NaN NaN NaN NaN
2016-02-29 NaN NaN NaN NaN
2016-03-31 2.062552 1.508062 1.317836 1.051874
2016-04-30 1.727587 1.856383 1.308263 1.113360
2016-05-31 1.602858 2.112790 1.533763 1.039221
2016-06-30 1.716985 2.403718 1.850741 1.726469
2016-07-31 1.828597 1.809054 1.543079 1.569896
2016-08-31 2.003484 1.531877 1.376907 1.852235
2016-09-30 1.854642 1.319289 1.438446 0.946304
2016-10-31 1.308001 1.718987 1.764252 1.157938
2016-11-30 0.962660 2.255580 1.489076 0.493370
2016-12-31 0.949810 1.753511 1.321650 1.377429https://stackoverflow.com/questions/40709456
复制相似问题