2016-05-18 4 views
2

100から始まる新しいdf列「dos」を取得しようとしていますが、それ以降の各セルはその上の数字に 'uno'の対応するセルを掛けます。 100上記のセルを乗算して式を持つパンダデータフレームを作成する

GrVsVal = pd.DataFrame(columns = ['uno', 'dos'], index = df_ch.index) 
GrVsVal['uno'] = 1 + (df_ch['IVV'] - df_ch['IVE']) 
GrVsVal['dos'].ix[0] = 100 
GrVsVal['dos'].ix[1:] = GrVsVal['uno'].ix[1:] * GrVsVal['dos'].ix[0:] 

print GrVsVal 

後に、それはちょうど私はNaNを与えているいくつかの理由、それは私を与える:

  uno  dos 
Date  
1/2/12 .997  100 
1/3/12 .677  NaN 
1/4/12 .986  NaN 

ので、最初のNaNが100 * 0.677である必要があり、二NaNの最初の結果だろうNaN * .986

答えて

1
GrVsVal = pd.DataFrame({'uno': 1 + df_ch['IVV'] - df_ch['IVE']}, index = df_ch.index) 

GrVsVal['dos'] = 100 
GrVsVal.loc[1:, 'dos'] = GrVsVal.uno[1:].cumprod() * 100 
>>> GrVsVal 
      uno  dos 
    Date 
1/2/12 0.997 100.0000 
1/3/12 0.677 67.7000 
1/4/12 0.986 66.7522 
+0

wow。私のソリューションよりはるかにエレガントです。忠告 –

+0

ありがとう、私の友人!あなたは私がこのことを理解しようとしていて、どれほど不満を感じているのか分かりません! – James

1

あなたのコードに何が含まれているかを知るのは少し難しいです。しかし、これはあなたが望む結果を得ました(私が正しく理解している場合)。

import pandas as pd 


date = ['1/2/12', '1/3/12', '1/4/12'] 
uno = [.997, .677, .986] 

GrVsVal = pd.DataFrame({'date': date, 'uno':uno}) 
dos = [100] 
i = 0 
for u in GrVsVal.iterrows(): 
    while i+1 < len(GrVsVal['uno']): 
     dos.append(GrVsVal['uno'][i+1]*dos[i]) 
     i += 1 

GrVsVal['dos'] = dos 

print(GrVsVal) 

実行すると結果が表示されます。必要に応じてコードを修正してください。 編集:申し訳ありません、私はそれを台無しにしました。今修正する必要があります。

関連する問題