сканирующее окно для большого датафрейма
Подскажите как оптимальней написать сканирующее окно большого df? Задача выбрать список id которые находятся в пределе 5 минут до и 5 мин после точки входа, точка входа каждая строка df. Тоесть для каждого вхождения создать список всех кто попадает в окно 10 минут с точкой вхождения по центру. df 1M+ row
import pandas as pd
from datetime import timedelta
df = pd.read_csv('data.csv', parse_dates=['timestamp'])
df = df.set_index('timestamp')
window_size = timedelta(minutes=10)
def get_ids_in_window(x):
center = x.index
start = center - window_size / 2
end = center + window_size / 2
window = x[(x.index >= start) & (x.index <= end)]
return window['id'].unique().tolist()
result = df.rolling(window_size).apply(get_ids_in_window, raw=False)
result = result[result.notnull()]
result = pd.DataFrame(result, columns=['ids_in_window'])
Источник: Stack Overflow на русском