に基づいた値の反復計算を最適化する。これは、私のデータフレームである:成長率
Date A new_growth_rate
2011/01/01 100
2011/02/01 101
.
2012/01/01 120 0.035
2012/02/01 121 0.035
.
2013/01/01 131 0.036
2013/01/01 133 0.038
これは私が必要なものです:私は、各列 の成長率に基づいて値を計算する必要が
Date A new_growth_rate
2011/01/01 100
2011/02/01 101
.
.
2012/01/01 103.62 .035 A=100/(1-0.035)
2012/02/01 104.66 .035 A=101/(1-0.035)
.
.
2013/01/01 107.49 .036 A=103.62/(1-0.036)
2013/02/01 108.68 .038 A=104.66/(1-0.038)
私は400列とそれに対応する成長率のデータフレームを持っています。
私は以下の式を使用して成長率を計算しました:(one year old value)*(1+current month growth rate)
。この計算された値は、来年の値を取得する際に使用されます。このように私は400列とそれに対応する成長率を持っています。時系列は30年のデータを持っています
現在、私は各列を取得するために2つのループ1を使用しています。そして、各列の期間にわたって繰り返し、前のループで計算された値を取得します。 500行と400列のデータセットを処理するには数時間かかります。 ?このための良い方法は、 `あり
私のコードスニペットは以下の通りです:あなたはインデックスとして年の値を使用して、使用することができます
df_new=pd.DataFrame()
for i,row in grpby.iterrows():
df_csr=grwth.loc[(grwth['A']==row['A'])].copy()
a = pd.to_datetime("2011-12-01",format='%Y-%m-%d')
b = a
while b <a+relativedelta.relativedelta(months=420):
b=b+relativedelta.relativedelta(months=1)
val= df_csr.loc[df_csr['Date']==(b+relativedelta.relativedelta(months=-12))].copy()
val2=val.get_value(val.index[0],'Val')
grwth_r=df_csr.loc[df_csr['date']==b]['new_growth_rate'].copy()
grwth_r2=grwth_r.get_value(grwth_r.index[0],'new_growth_rate')
df_csr.loc[df_csr['Date']==b,'Val']=val2/(1-grwth_r2)
df_new=pd.concat([df_new,df_csr])
を役に立てば幸い:(? 'grwth'あるもの)より私たちと遊ぶだけの十分なデータが得られなく –
ルックfor series.rolling.apply –
GRWTHは列のリストです – Sanjay