我想计算以下公式。
NVI(t) = NVI(t-1) + ROC(t)*NVI(t-1)
NVI
和ROC
的长度Series
相同。
不确定是否可以在没有for循环的情况下完成。
=============================================
也许我之前并不清楚,我们只有NVI(0)= 100,ROC是系列,我们需要逐步从上面的公式生成NVI(1 ... t)系列。
答案 0 :(得分: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
答案 1 :(得分: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