Использование Pandas 1.0 Мне нужно сгенерировать скользящий максимум с окном из трех предыдущих наблюдений, исключая текущее наблюдение. В R это достигается с помощью
library(tidyverse)
test_df = data.frame(a = 1:5, b = c(40, 37, 60, 45, 40))
test_df <- test_df %>% mutate(
rolling_max=rollapply(b, width = list(-1:-3), max, na.rm = TRUE, partial = 0, align = "right")
)
> test_df
a b rolling_max
1 1 40 -Inf
2 2 37 40
3 3 60 40
4 4 45 60
5 5 40 60
В Python функция pandas .rolling.apply (), похоже, не имеет способа исключить текущее наблюдение, поэтому это дает неожиданный результат: 1004
import pandas as pd
test_df = pd.DataFrame({'a': [1,2,3,4,5], 'b': [40,37,60,45,40]})
test_df['rolling_max'] = test_df['b'].rolling(3).apply(max)
test_df
a b rolling_max
0 1 40 NaN
1 2 37 NaN
2 3 60 60.0
3 4 45 60.0
4 5 40 60.0