我已经根据一些市场数据计算了每日返回,并尝试将每个返回添加到累积列 (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
的当前值code> 从而对 Dal_rets 中的所有值进行增量求和。我知道我可以使用 .cumprod()
但我想了解为什么我的方法不起作用
最佳答案
merged['cum_rets'].shift(1) should retrieve the previous value for cum_rets and then add it to the current value of Dal_ret
是正确的。不过,结论
thus incrementally sumating all values in Dal_rets
不是。
表达式
a = b + c
将 a
、b
和 c
视为不同的数组,因为它首先添加b
和 c
,然后将结果分配给 a
。 a
和 b
是否指的是同一事物并不重要。
顺便说一句,您可能需要这里的 cumsum
,而不是 cumprod
。
关于python - 计算累计返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35239351/