Python 所有群体的滚动回报

Python 所有群体的滚动回报,python,pandas,Python,Pandas,我有以下数据集,其中的值表示返回 date SP500 MEUR 1/3/1973 0.0049 0.003078 1/4/1973 -0.001194 0.003365 1/5/1973 0.004882 0.004439 1/8/1973 -0.000198 0.000196 1/9/1973 0 -0.000295 1/10/1973

我有以下数据集,其中的值表示返回

date        SP500       MEUR        
1/3/1973     0.0049      0.003078    
1/4/1973    -0.001194    0.003365    
1/5/1973     0.004882    0.004439   
1/8/1973    -0.000198    0.000196   
1/9/1973     0          -0.000295   
1/10/1973   -0.001983    0.000884       
1/11/1973    0.007949   -0.000785       
1/12/1973   -0.007394    0.003634   
我想计算上述每一列的3天、10天、15天远期收益率(此处仅显示2列),然后将这些列中的每一列作为SP500.3天SP5500.10天添加到上表中

有没有办法不做两个嵌套循环?输出应该如下所示:

date        SP500       MEUR        SP500_3day    MEUR_3day
1/3/1973     0.0049      0.003078    0.003483442     0.00801647
1/4/1973    -0.001194    0.003365    0.004683033     0.004339502
1/5/1973     0.004882    0.004439   -0.002180607     0.000784855
1/8/1973    -0.000198    0.000196    0.005950237    -0.000196723
1/9/1973     0          -0.000295   -0.001487759     0.003732663
1/10/1973   -0.001983    0.000884       
1/11/1973    0.007949   -0.000785       
1/12/1973   -0.007394    0.003634       
比如说,,
1/3/1973:SP500.3day=((1+-0.001194)(1+0.004882)(1+-0.000198))-1

这里的循环真的没有什么不好的(或慢的)。它主要是迭代要避免的行。因此,下面的代码利用了矢量化操作,速度应该非常快。请注意,假设所有值都是返回值,而不是价格

np.random.seed(123)
df = pd.DataFrame({ 'sp500':(abs(np.random.randn(12)/10)), 
                    'meur' :(abs(np.random.randn(12)/10)), }, 
                    index=pd.date_range('1-3-1973', periods=12, freq='B') )
for i in [3,10]:  
    for c in ['meur','sp500']:
        df[c+'_'+str(i)] = df[c].rolling(i).apply( lambda x: (x+1).prod() - 1 ).shift(-i)

                meur     sp500    meur_3   sp500_3   meur_10  sp500_10
1973-01-03  0.149139  0.108563  0.159387  0.301195  1.659468  1.717294
1973-01-04  0.063890  0.099735  0.330156  0.251649  1.793686  1.494265
1973-01-05  0.044398  0.028298  0.552121  0.418219       NaN       NaN
1973-01-08  0.043435  0.150629  0.636865  0.531661       NaN       NaN
1973-01-09  0.220593  0.057860  0.392830  0.509988       NaN       NaN
1973-01-10  0.218679  0.165144  0.227176  0.460029       NaN       NaN
1973-01-11  0.100405  0.242668  0.281450  0.276749       NaN       NaN
1973-01-12  0.038619  0.042891  0.349266  0.307352       NaN       NaN
1973-01-15  0.073737  0.126594  0.404363  0.171437       NaN       NaN
1973-01-16  0.149073  0.086674       NaN       NaN       NaN       NaN
1973-01-17  0.093583  0.067889       NaN       NaN       NaN       NaN
1973-01-18  0.117583  0.009471       NaN       NaN       NaN       NaN

您能显示您的预期输出吗?添加的输出感谢它是日志返回还是标准返回标准返回这不是我想要的答案,但感谢您的尝试