我正在寻找是否有一种程序化的方式来重新采样并计算一年中百分比变化计算结果,当最后一段时间是部分时。例如,假设我想做一年一年的变化。
from pandas_datareader import data
goog = data.DataReader('GOOG', start='2014', end='12-12-2016',
data_source='yahoo')
goog = goog['Close']
goog.resample('m').sum().pct_change(12).tail(-12)
最后4个值如下所示:
Date
2016-09-30 0.251944
2016-10-31 0.134146
2016-11-30 0.094623
2016-12-31 -0.582236
pandas resample将12月的部分月份(到12日)相加,并将其计算为计算百分比变化的整月。当这不是现实时(因为我们将整月与部分月份进行比较),这使得它处于非常负数。我想知道我是否从根本上改变了错误的方式。任何建议都将不胜感激。
答案 0 :(得分:1)
我会使用滚动窗口来做同事。
pct = goog.pct_change().add(1)
# rolling doesn't have a cumprod
# so I'm going to use logs
np.exp(np.log(pct).rolling('365D').sum()).sub(1).resample('M').last()
Date
2014-01-31 0.060955
2014-02-28 0.092110
2014-03-31 0.001737
2014-04-30 -0.052777
2014-05-31 0.006989
2014-06-30 0.034669
2014-07-31 0.028050
2014-08-31 0.028050
2014-09-30 0.038410
2014-10-31 0.005532
2014-11-30 -0.025493
2014-12-31 -0.053244
2015-01-31 -0.057501
2015-02-28 -0.083085
2015-03-31 -0.016109
2015-04-30 0.025889
2015-05-31 -0.044715
2015-06-30 -0.090231
2015-07-31 0.100507
2015-08-31 0.087560
2015-09-30 0.059591
2015-10-31 0.298756
2015-11-30 0.378077
2015-12-31 0.449568
2016-01-31 0.462888
2016-02-29 0.256465
2016-03-31 0.380584
2016-04-30 0.289705
2016-05-31 0.377779
2016-06-30 0.326268
2016-07-31 0.215305
2016-08-31 0.283143
2016-09-30 0.271557
2016-10-31 0.103727
2016-11-30 -0.011733
2016-12-31 0.064632
Freq: M, Name: Close, dtype: float64
答案 1 :(得分:0)
一些选项: