2016-02-06 4 views
1

Я рассчитал ежедневные доходы от некоторых рыночных данных и стараюсь добавить каждый из этих возвратов в столбец накопления (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

слит [ «cum_rets»]. Смещаться (1) должно получить предыдущее значение cum_rets, а затем добавить его в текущее значение Dal_ret

является правильным. Однако вывод

, таким образом, постепенно sumating все значения в Dal_rets

нет.

Выражения

a = b + c 

лечит a, b и c как отдельные массивы в том смысле, что первого добавляет b и c, а затем присваивают результаты a. Неважно, a и b относятся к одной и той же вещи.


Кстати, вы, вероятно, хотите здесь cumsum, не cumprod.

+0

cumsum работал отлично, спасибо. Однако я до сих пор не понимаю, почему моя функция просто возвращает значение в 'Dal_rets', и я хотел бы знать, почему. Как я могу изменить свой код для достижения результата, который создает cumsum? –

+0

Кажется, что используется 'merged ['cum_rets'] = merged ['cum_rets']. Shift (1) + merged.Dal_rets' совпадает с' объединенным ['cum_rets'] = merged.Dal_rets'. Почему добавление в 'merged ['cum_rets']. Shift (1)' не добавлять предыдущую ячейку в cum_rets? –

+0

@DavidHancock Это не имеет для меня никакого смысла. Это произойдет, если 'merged [' cum_rets] 'равно 0, и даже тогда это будет неправильно для одной из строк. Я предлагаю вам открыть отдельный вопрос по этому поводу, используя небольшой пример. Я уверен, что кто-то ответит, но, если хотите, напишите здесь ответ, и я буду рад посмотреть. –

Смежные вопросы