2017-02-12 1 views
0

저는 NaN 값을 가진 데이터 프레임을 가지고 있습니다. 난 CAGR로의 NaN 값NaN 열을 계산 된 CAGR 값으로 바꾸는 방법

val1 val2 val3 val4 val5 
0 100 100 100 100 100 
1 90 110 80 110 50 
2 70 150 70 NaN NaN 
3 NaN NaN NaN NaN NaN 

CAGR (연평균 성장률) = (최종 값/제 값) ** (년 1/숫자) 예

, VAL1 년대 값 것으로 교체 할 CAGR은 -23 %입니다. 그래서 VAL1의 최종 값이 될 것이다 53.9

열 val4의 연평균 값이다

너무 NaN이 121되며 row3 NaN이 난 자동 NaN를 대체 할 수있는 방법 (133)

로 대체 ROW2 10 %?

질문은

1) 어떻게 CAGR을 계산할 수 있습니까?

나는 isnull()을 사용하므로 어떤 행이 비어 있는지 찾았습니다. 하지만 CAGR 계산하는 행을 제외하고 어떻게 해야할지 모르겠다.

2) 어떻게 NaN을 계산 된 값으로 바꿀 수 있습니까?

감사합니다.

답변

0
from __future__ import division # for python2.7 
import numpy as np 

# tab delimitted data 
a = '''100 100 100 100 100 
90 110 80 110 50 
70 150 70 NaN NaN 
NaN NaN NaN NaN NaN 
''' 

# parse and make a numpy array 
data = np.array([[np.nan if aaa=='NaN' else int(aaa) for aaa in aa.split('\t')] for aa in a.splitlines()]) 

for col in range(5): 

    Nyears = np.isnan(data[:,col]).argmax()-1 # row index for the last non-NaN value 
    endvalue = data[Nyears,col] 
    cagr = (endvalue/100) ** (1/Nyears) 
    print Nyears, endvalue, cagr 

    for year in np.argwhere(np.isnan(data[:,col])): 
     data[year,col] = data[year-1,col] * cagr 

print data 

내가 얻을 :

[[ 100.   100.   100.   100.   100.  ] 
[ 90.   110.   80.   110.   50.  ] 
[ 70.   150.   70.   121.   25.  ] 
[ 58.56620186 183.71173071 58.56620186 133.1   12.5  ]] 
관련 문제