Мой информационный кадр имеет столбец времени (в наносекундах) и столбец идентификатора. Я хотел бы найти совпадения для каждой строки, которые l ie в пределах временного окна от -x до -y нс до времени этой строки. Каждая строка может иметь несколько совпадений или ни одного вообще.
, например, для этого набора данных, и с диапазоном окон от -5000 до -3000 (который был переведен в столбцы window_start и window_end)
id time window_end window_start
1 1000 -2000 -4000
2 2000 -1000 -3000
3 4000 1000 -1000
4 7000 4000 2000
5 8000 5000 3000
6 10000 7000 5000
Я хотел бы получить следующие совпадения
match_id_a match_id_b
2 4
3 4
3 5
4 6
Я использовал np.searchsorted ранее для достижения чего-то похожего, но он соответствует максимум одной строке для каждого
min_delay = 3000
max_delay = 5000
df['timeToSearch'] = df['time'] - min_delay
df['matchIndex'] = np.searchsorted(df['time'], df['timeToSearch'], side='right') - 1
match_df = pd.merge(left=df[df['matchIndex']!=-1],right=df,how='right', left_on='matchIndex', right_index=True,suffixes=('', '_match'))
match_df['timeDiff'] = match_df['time'] - match_df['time_match']
match_df = match_df[(((match_df['timeDiff'] >= min_delay) & (match_df['timeDiff'] <= max_delay))|(match_df['id_match'].isna()))]