Python滚动周期返回
我需要在以下数据框架上制定6个月滚动回报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
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?我列出了当前的数据帧,得到正确输出的公式,我尝试实现它的代码,我需要它产生什么,以及我从我尝试的代码中实际得到的结果。六个月的比较,所以按五个而不是六个移动。