0

我想计算以下公式。

    NVI(t) = NVI(t-1) + ROC(t)*NVI(t-1)

两者NVIROC长度相同Series

不确定这是否可以在没有 for 循环的情况下完成。

==============================================

也许我之前没有说清楚,我们只有 NVI(0)=100,ROC 是一个序列,我们需要从上面的公式逐步生成 NVI(1...t) 序列。

4

2 回答 2

1

shift用这个方法很容易。

In [21]: df = pd.DataFrame({'nvi': np.random.uniform(0, 1, 10), 'roc': np.random.uniform(0, 1, 10)})

In [22]: df
Out[22]: 
        nvi       roc
0  0.237223  0.256954
1  0.583694  0.473751
2  0.441392  0.734422
3  0.111818  0.947311
4  0.798595  0.537202
5  0.782228  0.053902
6  0.806241  0.640266
7  0.568911  0.945149
8  0.020364  0.331894
9  0.193462  0.090610

In [23]: df['nvi_t'] = df.nvi.shift() * df.roc

In [24]: df
Out[24]: 
        nvi       roc     nvi_t
0  0.237223  0.256954       NaN
1  0.583694  0.473751  0.112385
2  0.441392  0.734422  0.428678
3  0.111818  0.947311  0.418135
4  0.798595  0.537202  0.060069
5  0.782228  0.053902  0.043046
6  0.806241  0.640266  0.500834
7  0.568911  0.945149  0.762018
8  0.020364  0.331894  0.188818
9  0.193462  0.090610  0.001845
于 2013-08-03T14:27:25.147 回答
0

您可以使用 for 循环:

import numpy as np
from pandas import DataFrame, Series

ROC = Series(np.random.randn(10))
NVI = Series(np.zeros(len(ROC)), index=ROC.index)
NVI[0] = 100
for ii in range(1, len(ROC)):
    NVI[ii] = NVI[ii-1]*(1 + ROC[ii])
DataFrame({'NVI':NVI, 'ROC':ROC})

这使


Out[163]: 
        NVI       ROC
0   100.000000 -0.671116
1   175.200037  0.752000
2   190.944391  0.089865
3   213.050742  0.115774
4   285.011333  0.337763
5   654.873638  1.297711
6  1970.284505  2.008648
7  3738.327575  0.897354
8 -3640.266184 -1.973769
9 -8171.676652  1.244802
于 2013-08-03T14:55:27.340 回答