2016-07-13 5 views
1

私は2つのデータフレームを持っており、次の計算を行う必要があります。 twrのtwr.loc ['20151215']を上記の100に値pctを掛けて計算します。 loc ['20151216']。これは、各セルごとに別々に実行し、次の行を続ける必要があります。行に応じた各行のパンダ計算

for eachdate in range(1, len(daterange)): 
     date1_lbl = TWRR.index[eachdate] 
     date2_lbl = TWRR.index[eachdate+1] 
     TWRR.loc[date2_lbl] = TWRR.loc[date1_lbl] * (1 + pct_change.loc[date2_lbl]) 

print pct 

       a   b   c   d 
Date            
2015-12-15  NaN  NaN  NaN  NaN 
2015-12-16 -0.006232 -0.011392 -0.010945 -0.010373 
2015-12-17 -0.011626 -0.014725 -0.016674 -0.006613 
2015-12-18 -0.012519 -0.015595 -0.014799 -0.003768 

print twr 
       a  b  c  d 
2015-12-15 100 100 100 100 
2015-12-16 NaN NaN NaN NaN 
2015-12-17 NaN NaN NaN NaN 
2015-12-18 NaN NaN NaN NaN 

だから、最初にそうLIKE「2015年12月16日」を記入する必要があります:これは私が動作しなくなる試したものです

2015-12-16 99.99376 98.8608 98.90550 0.989627 

そして、次のそれは2015年を計算する必要があります以前に計算された行を使って-12-17 '...私はそれを把握することはできません。ご協力いただきありがとうございます!

答えて

0

あなたはcumprodを使用したい:

pct.a.fillna(0).add(1).cumprod().mul(100) 

enter image description here

+0

私はあなたのラインを理解し、私はそれらの機能に新たなんです。私はまだそれを試してみる必要があります。それらを指摘してくれてありがとうtom。しかし、100と同じではない開始値の場合、twrの最初の行を指摘する方法はありますか?そして、それは何のために立つのでしょうか? – wasntme0804

+0

あなたの質問に記載されているのは、「100」の成長を計算することでした。その数字はかなり恣意的です。あなたが好きなものを挿入してください。はるかに重要な要素は、リターンを世話している。あなたが累積するとき、あなたは1 +リターンで持っていたものを掛けたいと思う。 '.add(1)'はそれだけです。それから私は '.cumprod()'で累積します。この時点で、私が持っているのは '1 'の成長です。それを何か他のものと掛け合わせることで、私はそれを成長させることができます。 – piRSquared

+0

メソッドでは、a、b、cおよびdの開始値はすべて同じである必要があります。それが同じでない場合に別の方法がありますか? – wasntme0804

関連する問題