Мне нужно объединить два фрейма pandas в идентификаторе и условие, когда дата в одном фрейме данных находится между двумя датами в другом фрейме данных.
Dataframe A имеет дату ( "fdate" ) и идентификатор ( "cusip" ):
Мне нужно объединить это с этим фреймом данных B:
on A.cusip==B.ncusip
и A.fdate
находится между B.namedt
и B.nameenddt
.
В SQL это было бы тривиально, но единственный способ увидеть, как это сделать в pandas, - это сначала безоговорочно объединить идентификатор и затем фильтровать условие даты:
df = pd.merge(A, B, how='inner', left_on='cusip', right_on='ncusip')
df = df[(df['fdate']>=df['namedt']) & (df['fdate']<=df['nameenddt'])]
Действительно ли это лучший способ сделать это? Похоже, что было бы намного лучше, если бы можно было фильтровать внутри слияния, чтобы избежать слияния потенциально очень большого фрейма после слияния, но до того, как фильтр завершился.