Python滚动周期返回

Python滚动周期返回,python,pandas,Python,Pandas,我需要在以下数据框架上制定6个月滚动回报 date Portfolio Performance 2001-11-30 1.048134 2001-12-31 1.040809 2002-01-31 1.054187 2002-02-28 1.039920 2002-03-29 1.073882 2002-04-30 1.100327 2002-05-31 1.094338 2002-06-28 1.019593 2002-07-31

我需要在以下数据框架上制定6个月滚动回报

date         Portfolio Performance
2001-11-30    1.048134
2001-12-31    1.040809
2002-01-31    1.054187
2002-02-28    1.039920
2002-03-29    1.073882
2002-04-30    1.100327
2002-05-31    1.094338
2002-06-28    1.019593
2002-07-31    1.094096
2002-08-30    1.054130
2002-09-30    1.024051
2002-10-31    0.992017
前面问题的很多答案都描述了滚动平均回报,我可以做到。然而,我不是在寻找平均数。我需要的是以下滚动6个月回报的示例公式:

(1.100327 - 1.048134)/1.100327

公式将考虑下一个6个月块在2001年-12月31日和2002年至05-31之间,并持续到数据文件的末尾。

我尝试了以下方法,但没有提供正确的答案

portfolio['rolling'] = portfolio['Portfolio Performance'].rolling(window=6).apply(np.prod) - 1
预期产出将是:

date         Portfolio Performance  Rolling
2001-11-30    1.048134              NaN
2001-12-31    1.040809              NaN
2002-01-31    1.054187              NaN
2002-02-28    1.039920              NaN
2002-03-29    1.073882              NaN
2002-04-30    1.100327              0.0520
2002-05-31    1.094338              0.0422    
2002-06-28    1.019593             -0.0280
电流输出为:

            Portfolio Performance   rolling
date                                       
2001-11-30               1.048134       NaN
2001-12-31               1.040809       NaN
2002-01-31               1.054187       NaN
2002-02-28               1.039920       NaN
2002-03-29               1.073882       NaN
2002-04-30               1.100327  0.413135
2002-05-31               1.094338  0.475429
2002-06-28               1.019593  0.445354
2002-07-31               1.094096  0.500072
2002-08-30               1.054130  0.520569
2002-09-30               1.024051  0.450011
2002-10-31               0.992017  0.307280

我只是简单地添加了6个月的移位列,然后运行所给出的公式。这是否符合问题的意图

df['before_6m'] = df['Portfolio Performance'].shift(6)
df['rolling'] = (df['Portfolio Performance'] - df['before_6m'])/df['Portfolio Performance']
df
|    | date                |   Portfolio Performance |   before_6m |     rolling |
|---:|:--------------------|------------------------:|------------:|------------:|
|  0 | 2001-11-30 00:00:00 |                1.04813  |   nan       | nan         |
|  1 | 2001-12-31 00:00:00 |                1.04081  |   nan       | nan         |
|  2 | 2002-01-31 00:00:00 |                1.05419  |   nan       | nan         |
|  3 | 2002-02-28 00:00:00 |                1.03992  |   nan       | nan         |
|  4 | 2002-03-29 00:00:00 |                1.07388  |   nan       | nan         |
|  5 | 2002-04-30 00:00:00 |                1.10033  |   nan       | nan         |
|  6 | 2002-05-31 00:00:00 |                1.09434  |     1.04813 |   0.042221  |
|  7 | 2002-06-28 00:00:00 |                1.01959  |     1.04081 |  -0.0208083 |
|  8 | 2002-07-31 00:00:00 |                1.0941   |     1.05419 |   0.0364767 |
|  9 | 2002-08-30 00:00:00 |                1.05413  |     1.03992 |   0.0134803 |
| 10 | 2002-09-30 00:00:00 |                1.02405  |     1.07388 |  -0.0486607 |
| 11 | 2002-10-31 00:00:00 |                0.992017 |     1.10033 |  -0.109182  |

请提供a,以及当前和预期的输出。因此类似于
(df['Portfolio Performance'][6:]-df['Portfolio Performance'][:-6])/df['Portfolio Performance'][6:]
?@daveskis看起来仍然不像MCVE,我遗漏了什么吗?此外,像那样共享系列/数据帧是不切实际和不可靠的。@AMC我不确定我能提供多少额外信息。我想我列出的是MCVE?我列出了当前的数据帧,得到正确输出的公式,我尝试实现它的代码,我需要它产生什么,以及我从我尝试的代码中实际得到的结果。六个月的比较,所以按五个而不是六个移动。