2013-08-03 9 views
0

다음 공식을 계산하고 싶습니다.Python Pandas 고정되지 않은 계수가있는 누적 합

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

모두 NVIROC는 같은 길이 Series 있습니다.

for 루프없이 수행 할 수 있는지 확실하지 않습니다.

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

아마 NVI (0) = 100, ROC가 시리즈 일 뿐이므로 위 공식에서 NVI (1 ... t) 시리즈를 점진적으로 생성해야합니다.

답변

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 
+0

안녕주는, 어쩌면 내가 분명히 존재 않네. 당신은 NVI (0) = 100만을 가지고 있습니다. 그러나 당신은 가지고있는 전체 ROC 시리즈를 가지고 있으므로 NVI (1 ..... t)를 점진적으로 계산해야합니다. – tesla1060

+0

아, "NVI와 ROC 모두 길이가 같은 시리즈"라고 말했을 때 나는 NVI의 전체 시리즈를 가지고 있었고 그 다음에 대체 "예측"시리즈를 원했습니다. 그러면 루프가 필요할 것입니다. 아마도 모든 계산을 수행하고 마지막에 시리즈 또는 DataFrame을 구성하는 것이 가장 좋습니다. – TomAugspurger

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