我的包含月度回报的df如下所示:
df=pd.DataFrame((x*x).dropna(),columns=['mthly rtrn'])
mthly rtrn
2016-09-30 0.002488
2016-10-31 -0.004692
2016-11-30 0.003157
2016-12-30 -0.000503
2017-01-31 0.008019
2017-02-28 0.010055
2017-03-31 0.003435
2017-04-28 0.002577
2017-05-31 0.012107
2017-06-30 0.001089
如何将此转换为包含Jan到Dec列的df以及累计年度回报的列。行应该是2016年,2017年等。理想情况下,数字应以%表示。
期望的输出:
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ANNUAL
2016 -5.0 -0.1 6.7 0.4 1.7 0.3 3.6 0.1 0.0 -1.7 3.7 2.0 12.0
2017 1.8 3.9 0.1 1.0 1.4 0.6 0.1 NA NA NA NA NA 9.3
其中,ANNUAL是月度回报的结果。
实现这一目标的最佳方式是什么?
答案 0 :(得分:1)
我首先使用this向您的df添加其他列年和月,然后使用pivot table创建新的df到在每月返回值周围获取索引为年度,列为月。
获得数据透视表后,您可以沿轴= 1使用apply来获取每年所需的任何聚合。
我无法对汇总做出真正的评论,因为我不确定是否会累积“汇总”。你的意思是加法或乘法。您可能需要考虑cumsum或gmean from scipy,或者如果您不想让scipy this功能正常工作。
答案 1 :(得分:0)
我首先使用.resample()方法按月重新采样数据:
然后使用pivot方法将行转换为列:
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.pivot_table.html
然后我会为年度总数创建一个新列:
df['annual'] = df['jan']+df['feb']+...+df['dec']
答案 2 :(得分:0)
我找到了一个很好的工具来满足我的需求: https://github.com/ranaroussi/monthly-returns-heatmap