2017-02-12 2 views
0

J'ai une trame de données avec des valeurs NaN. je veux le remplacer NaN valeurs à CAGR valeurscomment remplacer les colonnes NaN avec des valeurs CAGR calculées

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 (taux de croissance annuel composé) = (valeur finale/première valeur) ** (1/nombre d'années)

par exemple, val1 de Le TCAC est de -23%. de sorte que la dernière valeur de val1 sera 53,9

la valeur de la colonne Val4 CAGR est de 10%

donc ROW2 NaN sera 121 et row3 NaN remplacer comme 133

Comment puis-je remplacer NaN automatiquement?

les questions est

1) Comment puis-je calculer CAGR chaque colonne?

J'ai utilisé isnull() donc, j'ai trouvé quelle ligne est vide. mais je ne sais pas comment faire pour calculer la TCAC.

2) comment puis-je remplacer NaN par des valeurs calculées?

merci.

Répondre

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 

je reçois:

[[ 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  ]]