timing = dfWeeks.index.values[:, (None)] < dfDays.index.values
target_hit = dfWeeks.target.values[:, (None)] <= dfDays.price.values
matches = timing & target_hit
got_match = matches.any(1)
first = matches.argmax(1)[got_match]
dfWeeks.loc[got_match, 'target_hit'] = dfDays.index.values[first]
dfWeeks
Vectorised way to query date and price data