将pandas时间序列与月度回报转换为具有col累积年回报的df

时间:2017-07-07 08:11:17

标签: python pandas python-3.6

我的包含月度回报的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是月度回报的结果。

实现这一目标的最佳方式是什么?

3 个答案:

答案 0 :(得分:1)

我首先使用this向您的df添加其他列,然后使用pivot table创建新的df到在每月返回值周围获取索引为年度列为月

获得数据透视表后,您可以沿轴= 1使用apply来获取每年所需的任何聚合。

我无法对汇总做出真正的评论,因为我不确定是否会累积“汇总”。你的意思是加法或乘法。您可能需要考虑cumsumgmean from scipy,或者如果您不想让scipy this功能正常工作。

答案 1 :(得分:0)

我首先使用.resample()方法按月重新采样数据:

http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.core.groupby.DataFrameGroupBy.resample.html

然后使用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