Поиск много-много совпадений во временном окне - PullRequest
0 голосов
/ 21 января 2020

Мой информационный кадр имеет столбец времени (в наносекундах) и столбец идентификатора. Я хотел бы найти совпадения для каждой строки, которые 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()))]
...