rolling с заданным шагом
Всем привет! Есть скрипт, который при помощи rolling ищет в столбце максимальное значение. Текущий шаг окна =1, то есть последовательность скольжения (1,3,1) далее (3,1,5) и т.д
Как можно задать шаг = 3, то есть последовательность будет (1,3,1) и (5,10,5)?
На скриншоте указано движение окна и красным выделены максимумы, которые скрипт в итоге должен вывести.
Нашел вариант df.rolling(window=3,step=3), но он не работает...
import pandas as pd
sample = {
'ID':[1,1,1,9,9,9],
'Quant' :[1,3,1,5,10,5]
}
df = pd.DataFrame(sample)
df2=df.rolling(3).agg({'Quant':'max'})
df3=df2.dropna(how='all')
print(df3)
Ответы (2 шт):
Вы неверно понимаете работу метода rolling. Судя по описанию задачи, он вам вообще не подходит. я бы порекомендовал сделать так:
import pandas as pd
import numpy as np
sample = {
'ID':[1,1,1,9,9,9],
'Quant' :[1,3,1,5,10,5]
}
df = pd.DataFrame(sample)
step = 3
res = [x.Quant.max() for x in np.array_split(df, len(df)//step)]
print(res)
[3, 10]
То есть, с помощью np.array_split вы разбиваете датафрейм не куски нужной длины, а потом в каждом куске ищите максимум колонки Quant.
еще так можно получить нужные максимумы:
res = [df.iloc[i:i+3,1].max() for i in range(0,len(df),3)]
'''
[3, 10]
или чтобы отфильтровать нужные строки:
res = df.iloc[[df.iloc[i:i+3,1].idxmax() for i in range(0,len(df),3)]]
'''
ID Quant
1 1 3
4 9 10
