获取pandas数据透视表中行的cumprod()

时间:2017-10-24 07:01:43

标签: python pandas pivot-table

我想计算包含月度回报的数据透视表的每年几何回报(累计回报),并将其作为列添加到表中。数据透视表如下所示:

In [474]: piv.tail(3)
Out[474]: 
month   1    2    3    4    5    6    7    8    9    10   11   12
year                                                             
2015   3.0 -5.6  1.5 -0.1  0.3 -1.7  0.5 -7.0  0.3 -0.1  0.4  0.0
2016   5.2  4.7 -0.3  1.3 -6.1  0.3  3.5 -0.1  1.2 -1.9  0.7  0.9
2017   2.5  2.1  0.1  2.6  4.8  0.1  2.8  0.1 -2.1  0.5  NaN  NaN

尝试了

piv['annual'] = (piv+1).cumprod(axis=1)-1

这会引发错误。被困在这里任何帮助表示感谢。

1 个答案:

答案 0 :(得分:2)

  1. 这些回报太大而无法进入小数空间。它们必须占有百分之百的空间。因此,除以100.
  2. 使用prod
  3. piv.assign(annual=(piv / 100 + 1).prod(1) * 100 - 100)
    
    Month    1    2    3    4    5    6    7    8    9   10   11   12     annual
    Year                                                                        
    2015   3.0 -5.6  1.5 -0.1  0.3 -1.7  0.5 -7.0  0.3 -0.1  0.4  0.0  -8.600390
    2016   5.2  4.7 -0.3  1.3 -6.1  0.3  3.5 -0.1  1.2 -1.9  0.7  0.9   9.272164
    2017   2.5  2.1  0.1  2.6  4.8  0.1  2.8  0.1 -2.1  0.5  NaN  NaN  14.156949