Наличие странной проблемы, которая пересекает грань между статистикой / математикой и программированием (я не уверен, в чем заключается основная проблема).
У меня есть данные о доходах по месяцам.Вот небольшой снимок фрейма данных:
Strategy Theme Idea month PnL
Event Catalyst European Oil Services 2019-05 -1.412264e-10
Event Catalyst European Oil Services 2019-06 -2.688968e-08
Event Catalyst None 2019-06 1.546945e-08
Event M&A None 2019-06 2.128868e-08
Fundamental 5G Rollout Intelsat 2019-01 1.375019e-02
Теперь, когда я группирую по месяцам и суммам, затем объединяю результат, я получаю ожидаемый ответ и то, что я могу воспроизвести в Excel:
x = df.groupby(['month']).sum()
total_pnl = x.compound()['PnL']
Получает мой ожидаемый результат в 4,16%.Все идет нормально.Однако, взяв один и тот же кадр данных и составив отдельные идеи, а затем суммируя, можно получить другой ответ: 5,89%
dfx = df.pivot_table(index='month',columns=['Strategy','Theme','Idea'],values='PnL')
dfx = dfx.fillna(0.0)
dfx = dfx.compound()
dfx = dfx.reset_index(drop=False)
dfx.columns= ['Strategy','Theme','Idea','PnL']
total_pnl = sum(dfx['PnL'])
Сначала я подумал, что это просто математически неприемлемо для составных индивидуальных возвратовзатем суммируйте их, но простой пример, который я сделал в excel, доказал мне, что оба метода должны быть одинаковыми.Затем я проверил в Excel, будет ли проблема с 0 возвратами в любой месяц - это не так.
Теперь я пару часов ломал голову, пытаясь понять, почему эти цифры нене совпадают, когда я делаю это в Python, хотя мой простой пример Excel показывает, что они должны.
Можете ли вы вспомнить какие-либо предостережения, которые я не принимаю во внимание, которые могут быть причиной этого?