сканирующее окно для большого датафрейма

Рейтинг: 0Ответов: 1Опубликовано: 18.04.2023

Подскажите как оптимальней написать сканирующее окно большого 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'])

Ответы

▲ 0
df['C'] = [window.to_list() for window in df.B.rolling(window=3)]

and

df['C'] = pd.Series(df.B.rolling(window=3))