Вы можете использовать метод resample
с '10min'
в качестве аргумента для группировки по 10-минутным интервалам. Это более эффективно, чем использование rolling
для больших наборов данных временных рядов, при условии, что оно установлено в качестве индекса.
Пример данных
rng = pd.date_range('2000-01-01', periods=1_500_000, freq='S')
ts = pd.Series(np.arange(1_500_000), index=rng)
ts.head()
Выход:
2000-01-01 00:00:00 0
2000-01-01 00:00:01 1
2000-01-01 00:00:02 2
2000-01-01 00:00:03 3
2000-01-01 00:00:04 4
Freq: S, dtype: int64
Ответ
Использование функции из вашего вопроса:
np.average(ts.resample('10min').apply(lambda mylist: (max(mylist) - min(mylist))))
Выход:
599.0
Альтернатива
Только потому, что я не уверен на 100%, как вы хотите, чтобы результат выглядел, это даст вам диапазон за 10-минутный интервал:
result = ts.resample('10min').apply(lambda mylist: (max(mylist) - min(mylist)))
result.head()
Вывод:
2000-01-01 00:00:00 599
2000-01-01 00:10:00 599
2000-01-01 00:20:00 599
2000-01-01 00:30:00 599
2000-01-01 00:40:00 599
Freq: 10T, dtype: int64
В этом случае ответ всегда будет 599, поскольку максимум 600 секунд равен 600, а минимум равен 1, поэтому 600 - 1 = 599