Предполагая, что ваши фреймы данных содержат равные индексы, я бы сначала проверил, совпадают ли имена, а затем проверю, удовлетворены ли даты:
# check if names match
df2['name_match'] = (df1['name'] == df2['name'])
# check if dates match
df2['dt_match'] = (df1['start'] <= df2['start']) & (df1['end'] <= df2['start'])
# finally, map to a label (using boolean logic)
df2['label'] = (df2['name_match'] * df2['dt_match']).map({True:"yes", False:"no"})
# You can then remove the columns you created
df2.drop(columns=['name_match', 'dt_match'], inplace=True)
Если ваш df массивный, вы можете ускорить все это, применив логическое значение logi c к сравнению даты и времени, проверяя только строки, которые удовлетворяют name_match
.
Примечание: Похоже, что ваши индексы не совпадают, и в этом случае вам нужно будет объединить фреймы данных или сопоставьте их с помощью некоторой эвристики c или алгоритма приоритизации.