回答編集履歴

2

結果を分かりやすくするためにwindowを2に変更

2021/01/25 14:49

投稿

Daregada
Daregada

スコア11990

test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
  df = pd.read_csv(io.StringIO(txt))
40
40
 
41
- print(df['high'].rolling(3).max().shift(-3))
41
+ print(df['high'].rolling(2).max().shift(-2)) # 次行から2つ分のデータの最大値
42
42
 
43
43
  ```
44
44
 
@@ -46,11 +46,11 @@
46
46
 
47
47
  ```result
48
48
 
49
- 0 3090.0
49
+ 0 3075.0
50
50
 
51
51
  1 3090.0
52
52
 
53
- 2 NaN
53
+ 2 3090.0
54
54
 
55
55
  3 NaN
56
56
 

1

「次行から数行」に対応

2021/01/25 14:49

投稿

Daregada
Daregada

スコア11990

test CHANGED
@@ -1,4 +1,8 @@
1
1
  普通に`window=t`を指定して、`max`で最大値を求めてから、`shift(-t + 1)`すればいい。
2
+
3
+ 訂正: 現在行のデータを含まず、次行からというのであれば、さらに1行ずらして`shift(-t)`すればいい。
4
+
5
+
2
6
 
3
7
  ネタ元は、[python - How to Reverse Rolling Sum? - Stack Overflow](https://stackoverflow.com/questions/43101652/how-to-reverse-rolling-sum) より。
4
8
 
@@ -34,7 +38,7 @@
34
38
 
35
39
  df = pd.read_csv(io.StringIO(txt))
36
40
 
37
- print(df['high'].rolling(3).max().shift(-2))
41
+ print(df['high'].rolling(3).max().shift(-3))
38
42
 
39
43
  ```
40
44
 
@@ -42,11 +46,11 @@
42
46
 
43
47
  ```result
44
48
 
45
- 0 3075.0
49
+ 0 3090.0
46
50
 
47
51
  1 3090.0
48
52
 
49
- 2 3090.0
53
+ 2 NaN
50
54
 
51
55
  3 NaN
52
56