首页 > 解决方案 > Python Pandas 复合聚合不等于单个资产复合的总和

问题描述

有一个奇怪的问题绕过了统计/数学和编程之间的界限(我不确定根本问题是什么)。

我有一个按月按资产分类的回报数据框。这是数据框的一个小快照:

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 中做的一个简单示例向我证明了这两种方法应该是相同的。然后,如果在任何给定月份的回报为 0 会是一个问题,我会在 excel 中进行检查——它不是。

现在,我一直在摸索几个小时,试图弄清楚为什么当我在 Python 中执行这些数字时这些数字不匹配,而我的简单 excel 示例向我展示了它们应该匹配的原因。

你能想到我没有考虑到可能导致这种情况的任何警告吗?

标签: pythonpandaspandas-groupby

解决方案


推荐阅读