2017-02-18 58 views
0

我遇到了一個計算問題,我知道這可能很簡單,但卻讓我頭疼。同時在列和行之間進行操作大熊貓

我有一個熊貓數據框,我想要生成一個列,其中包含乘法一個值在同一行和一個行-1,此外,我想總結一個值在第一行,並把它放在實際的行。到目前爲止,我有這樣的:

     AAPL   GLD AAPL_cumu_rtn GLD_cumu_rtn AAPL_Dly_rtn \ 
Date 
2011-01-03 329.570000 138.000000  100.000000 100.000000   NaN 
2011-01-04 331.290012 134.750000  100.521896  97.644928  0.005219 
2011-01-05 334.000008 134.369995  101.344178  97.369562  0.008180 
2011-01-06 333.729988 133.830002  101.262247  96.978262  -0.000808 
2011-01-07 336.120003 133.580002  101.987439  96.797103  0.007162 

      GLD_Dly_rtn AAPL_invest GLD_invest 

2011-01-03   NaN  650000.0 350000.0 
2011-01-04 -0.023551   0.0   0.0 
2011-01-05 -0.002820   0.0   0.0 
2011-01-06 -0.004019   0.0   0.0 
2011-01-07 -0.001868   0.0   0.0 

我想先填完是乘AAPL_invest前一行,並與和自己在AAPL_Dly_rtn等APPL_invest和GLD_invest列...

     AAPL   GLD AAPL_cumu_rtn GLD_cumu_rtn AAPL_Dly_rtn \ 
Date 
2011-01-03 329.570000 138.000000  100.000000 100.000000   NaN 
2011-01-04 331.290012 134.750000  100.521896  97.644928  0.005219 
2011-01-05 334.000008 134.369995  101.344178  97.369562  0.008180 
2011-01-06 333.729988 133.830002  101.262247  96.978262  -0.000808 
2011-01-07 336.120003 133.580002  101.987439  96.797103  0.007162 

      GLD_Dly_rtn AAPL_invest GLD_invest 

2011-01-03   NaN  650000.0 350000.0 
2011-01-04 -0.023551  653392.3 341757.1 
2011-01-05 -0.002820  658737.1 340793.3 
2011-01-06 -0.004019   0.0   0.0 
2011-01-07 -0.001868   0.0   0.0 

如果任何人有任何想法,我怎麼能做到這一點,而不使用for循環我會apreciate!

非常感謝你!

回答

1

我認爲這可以用.cumprod完成。

例如,如果我們採取(df['GLD_Dly_rtn'] + 1).fillna(1),然後使用.cumprod()就可以了。我們將收益標準化,然後簡單地乘以初始投資,所以對於黃金來說,這是可能的。

df['GLD_total'] = (df['GLD_Dly_rtn'] + 1).fillna(1).cumprod() * 350000 

這裏的fillna部分只在那裏填充初始NaN。

,這導致:

0 350000.000000 
1 341757.150000 
2 340793.394837 
3 339423.746183 
4 338789.702625 

有可能是一個整潔或更一般的方式來使這一點,但我不能在此刻

編輯認爲它:

我我剛剛意識到你已經在數據框中有累計回報列,所以你可以簡單地使用: df['GLD_total'] = (df['GLD_cumu_rtn']/100) * 350000

+0

哇,沒有意識到!非常感謝你!!!也不知道cumproduct(),它可能會幫助我稍後。非常感謝你!我感謝您的幫助! – jurreaserna