如何使用Pandas计算投资组合的美元回撤(非百分比)
计算投资组合的美元回撤
当然可以!根据你给出的期望结果,这里的美元回撤指的是当前累计收益与此前累计收益历史峰值的差值(如果当前累计收益低于峰值,回撤为负;如果当前处于新高,回撤为0)。
用Pandas可以一行代码搞定这个计算:
df['Drawdown'] = (df['Cumulative'] - df['Cumulative'].cummax()).clip(upper=0)
分步解释:
df['Cumulative'].cummax():计算到每一行为止的累计收益历史峰值(滚动最大值),比如你提供的数据里前三天的峰值依次是248.85、297.20、326.49,之后因为没有再超过326.49的累计收益,所以峰值一直保持326.49;df['Cumulative'] - df['Cumulative'].cummax():计算当前累计收益与峰值的差值,当累计收益创新高时,差值为正,否则为负;.clip(upper=0):把正值替换为0,因为当累计收益创新高时,回撤为0,完全匹配你期望的结果。
验证你的数据:
用你提供的DataFrame测试,得到的Drawdown列和你给出的期望结果完全对应:
- 前三天累计收益持续创新高,Drawdown都是0;
- 1/13/2005第一次出现累计收益-173.51,与峰值326.49的差值为-500.00,和你期望的一致;
- 后续每一行的Drawdown计算结果都精准匹配,比如1/28/2005的-1662.99,就是-1336.50(当前累计)减去326.49(历史峰值)的结果。
如果需要给数值添加千位分隔符,可以用下面的代码格式化(注意会将列转为字符串类型):
df['Drawdown'] = df['Drawdown'].apply(lambda x: f"{x:,.2f}" if x != 0 else "0.00")
内容的提问来源于stack exchange,提问作者user8491020
相关产品推荐
相关产品推荐

