我已经计算了一些市场数据的每日回报,并且我试图在累积列(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()
,但我想了解为什么我的方法不起作用
答案 0 :(得分:1)
合并[' cum_rets'] .shift(1)应检索cum_rets的先前值,然后将其添加到Dal_ret的当前值
是对的。但是,结论
因此递增地使Dal_rets中的所有值
不是。
表达式
a = b + c
将a
,b
和c
视为不同的数组,因为首先添加了b
和c
,然后将结果分配给a
。如果a
和b
引用相同的内容并不重要。
顺便说一下,您可能需要cumsum
,而不是cumprod
。