mux = pd.MultiIndex.from_arrays(df_a.values.T, names=df_a.columns)
kws = dict(left_on='date', right_on='start', allow_exact_matches=True, by='ID')
mrg = pd.merge_asof(df_b, df_a, **kws).query('date <= end')
Pandas: Add amount in Dataframe based on date ranges and IDs