2016-05-23 10 views
1

this questionのフォローアップとして、 私はいくつかの欠落しているデータ値が存在する場合、このようなパンダのデータフレームからCAGRを計算したい:パンダ計算CAGR(欠損値)

df = pd.DataFrame({'A' : ['1','2','3','7'], 
         'B' : [7,6,np.nan,4], 
         'C' : [5,6,7,1], 
         'D' : [np.nan,9,9,8]}) 
df=df.set_index('A') 
df 
    B C D 
A   
1 7 5 NaN 
2 6 6 9 
3 NaN 7 9 
7 4 1 8 

ありがとうございます!

答えて

1

レベルからのリターンを計算するときは、最新のものを使用することは問題ありません。たとえば、行1のCAGRを計算する場合は、(5/7)^(1/3) - 1を使用します。また、行3(9/7)^(1/3)の場合も同様です。すべての年を見渡して年間を見ているという前提があります。これらの仮定で

df = df.bfill(axis=1).ffill(axis=1) 

次にリンク質問から解決策を適用します。

df['CAGR'] = df.T.pct_change().add(1).prod().pow(1./(len(df.columns) - 1)).sub(1) 

この想定外です。他の唯一の合理的な選択肢は、NaN以外の観測数で年換算することです。

notnull = df.notnull().sum(axis=1) 
df = df.bfill(axis=1).ffill(axis=1) 
df['CAGR'] = df.T.pct_change().add(1).prod().pow(1./(notnull.sub(1))).sub(1) 

実際にはそれは同様うちヌルの場合で動作しますように、これはより一般的な解決策を次のようになります。だから私は、とすることを追跡する必要があります。

+0

うわー、ありがとう!私は財務データの分析に取り掛かりつつあり、あなたの助けはずっと楽しいものになっています。 –

+0

私は助けてうれしいです。 – piRSquared