Reputation: 2071
I want to find highest price of stock in next 10 trading sessions.
Date Symbol Average Expected Value
3505 03-01-2000 ASIANPAINT 38.054 42.24
3506 04-01-2000 ASIANPAINT 38.35 42.24
3507 05-01-2000 ASIANPAINT 37.981 42.24
3508 06-01-2000 ASIANPAINT 37.988 42.24
3509 07-01-2000 ASIANPAINT 38.338 42.98
3510 10-01-2000 ASIANPAINT 41.497
3511 11-01-2000 ASIANPAINT 41.251
3512 12-01-2000 ASIANPAINT 42.146
3513 13-01-2000 ASIANPAINT 42.24
3514 14-01-2000 ASIANPAINT 41.005
3515 17-01-2000 ASIANPAINT 41.372
3516 18-01-2000 ASIANPAINT 41.376
3517 19-01-2000 ASIANPAINT 42.193
3518 20-01-2000 ASIANPAINT 41.878
3519 21-01-2000 ASIANPAINT 42.977
8994 03-01-2000 AXISBANK 5.34 5.448
8995 04-01-2000 AXISBANK 5.448 5.254
8996 05-01-2000 AXISBANK 5.248 5.254
8997 06-01-2000 AXISBANK 5.254 5.112
8998 07-01-2000 AXISBANK 5.008 5.112
8999 10-01-2000 AXISBANK 5.058
9000 11-01-2000 AXISBANK 4.78
9001 12-01-2000 AXISBANK 4.794
9002 13-01-2000 AXISBANK 4.754
9003 14-01-2000 AXISBANK 4.634
9004 17-01-2000 AXISBANK 5.018
9005 18-01-2000 AXISBANK 4.988
9006 19-01-2000 AXISBANK 5.112
9007 20-01-2000 AXISBANK 5.01
9008 21-01-2000 AXISBANK 4.958
Data in csv format
Date,Symbol,Average,Expected Value
03-01-2000,ASIANPAINT,38.054,42.24
04-01-2000,ASIANPAINT,38.35,42.24
05-01-2000,ASIANPAINT,37.981,42.24
06-01-2000,ASIANPAINT,37.988,42.24
07-01-2000,ASIANPAINT,38.338,42.98
10-01-2000,ASIANPAINT,41.497,
11-01-2000,ASIANPAINT,41.251,
12-01-2000,ASIANPAINT,42.146,
13-01-2000,ASIANPAINT,42.24,
14-01-2000,ASIANPAINT,41.005,
17-01-2000,ASIANPAINT,41.372,
18-01-2000,ASIANPAINT,41.376,
19-01-2000,ASIANPAINT,42.193,
20-01-2000,ASIANPAINT,41.878,
21-01-2000,ASIANPAINT,42.977,
03-01-2000,AXISBANK,5.34,5.448
04-01-2000,AXISBANK,5.448,5.254
05-01-2000,AXISBANK,5.248,5.254
06-01-2000,AXISBANK,5.254,5.112
07-01-2000,AXISBANK,5.008,5.112
10-01-2000,AXISBANK,5.058,
11-01-2000,AXISBANK,4.78,
12-01-2000,AXISBANK,4.794,
13-01-2000,AXISBANK,4.754,
14-01-2000,AXISBANK,4.634,
17-01-2000,AXISBANK,5.018,
18-01-2000,AXISBANK,4.988,
19-01-2000,AXISBANK,5.112,
20-01-2000,AXISBANK,5.01,
21-01-2000,AXISBANK,4.958,
I have tried so far
all_scripts_df.Average[::-1].rolling(window=10).max()[::-1][:15]
But this approach will consider current trading session as well. also group by will be little difficult.
Other approach I tried is
all_scripts_df.groupby('Symbol').rolling(10, min_periods=1)['Average'].max().reset_index().head(10)
But this approach looks back value and not look forward.
Upvotes: 1
Views: 53
Reputation: 863246
Use GroupBy.transform
with lambda function for avoid double groupby
:
df['Value'] = (df.groupby('Symbol')['Average']
.transform(lambda x: x.rolling(10, min_periods=1).max().shift(-10)))
Upvotes: 1
Reputation: 120479
Use a double groupby
:
df['Value'] = df.groupby('Symbol').rolling(10, min_periods=1)['Average'].max() \
.groupby(level=0).shift(-10).droplevel(0)
Output:
>>> df
Date Symbol Average Value
3505 2000-03-01 ASIANPAINT 38.054 42.240
3506 2000-04-01 ASIANPAINT 38.350 42.240
3507 2000-05-01 ASIANPAINT 37.981 42.240
3508 2000-06-01 ASIANPAINT 37.988 42.240
3509 2000-07-01 ASIANPAINT 38.338 42.977
3510 2000-10-01 ASIANPAINT 41.497 NaN
3511 2000-11-01 ASIANPAINT 41.251 NaN
3512 2000-12-01 ASIANPAINT 42.146 NaN
3513 2000-01-13 ASIANPAINT 42.240 NaN
3514 2000-01-14 ASIANPAINT 41.005 NaN
3515 2000-01-17 ASIANPAINT 41.372 NaN
3516 2000-01-18 ASIANPAINT 41.376 NaN
3517 2000-01-19 ASIANPAINT 42.193 NaN
3518 2000-01-20 ASIANPAINT 41.878 NaN
3519 2000-01-21 ASIANPAINT 42.977 NaN
8994 2000-03-01 AXISBANK 5.340 5.448
8995 2000-04-01 AXISBANK 5.448 5.254
8996 2000-05-01 AXISBANK 5.248 5.254
8997 2000-06-01 AXISBANK 5.254 5.112
8998 2000-07-01 AXISBANK 5.008 5.112
8999 2000-10-01 AXISBANK 5.058 NaN
9000 2000-11-01 AXISBANK 4.780 NaN
9001 2000-12-01 AXISBANK 4.794 NaN
9002 2000-01-13 AXISBANK 4.754 NaN
9003 2000-01-14 AXISBANK 4.634 NaN
9004 2000-01-17 AXISBANK 5.018 NaN
9005 2000-01-18 AXISBANK 4.988 NaN
9006 2000-01-19 AXISBANK 5.112 NaN
9007 2000-01-20 AXISBANK 5.010 NaN
9008 2000-01-21 AXISBANK 4.958 NaN
Upvotes: 1