2017-02-18 50 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