2017-02-12 7 views
0

私はNaN値を持つデータフレームを持っています。私はCAGRにNaN値が計算されたCAGR値でNaN列を置き換える方法

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のCAGR値が10%

なっておりますので、ROW2 NaNを121とROW3 NaNになります133

として交換するにはどうすれば自動的にはNaNを置き換えることができますか?

の質問は、私は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  ]] 
関連する問題