计算累积回报

时间:2016-02-06 09:20:56

标签: python pandas dataframe

我已经计算了一些市场数据的每日回报,并且我试图在累积列(cum_rets)中添加每个回报。以下是数据样本:

    timestamp   dash_cap    litecoin_cap    dogecoin_cap    nxt_cap Total_MC    Dal_rets
0   2014-02-14  702537  410011811   80883283    61942277    553539908   NaN
1   2014-02-15  1054625 413848776   73684156    59127182    547714739   -1.052349
2   2014-02-17  1882753 407014106   70512004    59753481    539162344   -1.561469
3   2014-02-18  3766068 398556278   69890414    60219880    532432640   -1.248178
4   2014-02-19  3038521 404855950   71588924    59870181    539353576   1.299871

我不明白为什么,当我使用这段代码时:

merged['cum_rets'] = 0
merged['cum_rets'] = merged['cum_rets'].shift(1) + merged.Dal_rets
merged

它返回

    timestamp   dash_cap    litecoin_cap    dogecoin_cap    nxt_cap Total_MC    Dal_rets    cum_rets
0   2014-02-14  702537  410011811   80883283    61942277    553539908   NaN NaN
1   2014-02-15  1054625 413848776   73684156    59127182    547714739   -1.052349   -1.052349
2   2014-02-17  1882753 407014106   70512004    59753481    539162344   -1.561469   -1.561469
3   2014-02-18  3766068 398556278   69890414    60219880    532432640   -1.248178   -1.248178

merged['cum_rets'].shift(1)应该检索cum_rets的先前值,然后将其添加到当前值Dal_ret,从而逐步提取Dal_rets中的所有值。我知道我可以使用.cumprod(),但我想了解为什么我的方法不起作用

1 个答案:

答案 0 :(得分:1)

  

合并[' cum_rets'] .shift(1)应检索cum_rets的先前值,然后将其添加到Dal_ret的当前值

是对的。但是,结论

  

因此递增地使Dal_rets中的所有值

不是。

表达式

 a = b + c

abc视为不同的数组,因为首先添加了bc ,然后将结果分配给a。如果ab引用相同的内容并不重要。

顺便说一下,您可能需要cumsum,而不是cumprod