Для вашего конкретного c запроса мы можем сделать это в одной строке с некоторой цепочкой методов и пониманием списка:
I3['new'] = [mains['Datecomb'].where(mains['Datecomb'] == i).count() > 0 for i in I3['dum'].values]
Это выражение использует понимание списка для подсчета количества записей в mains ['Datecomb'] для каждого значения в I3 ['dum'] , возвращает True , если этот счетчик> 0, и устанавливает результирующий список как столбец I3 ['new'] .
Если вы не знакомы с пониманием списков, посмотрите в Интернете несколько примеров. Это мощный инструмент!
В качестве альтернативы вы можете использовать метод DataFrame.join () , чтобы объединить результаты операции value_counts ()> 0 на mains :
I3 = I3.join(mains['Datecomb'].value_counts() > 0, on = 'dum').fillna(False)
I3 = I3.rename(columns={'Datecomb': 'new'})
Для более общих операций поиска, вероятно, лучше использовать методы join (), merge () или concat (). Я только что обнаружил, что первый метод выше хорошо работает для вашей спецификации c запрос
Я протестировал это на следующем наборе данных, и оба метода работали
I3 = pd.DataFrame([
['dum1', 'old1'],
['dum2', 'old2'],
['dum3', 'old3'],
['dum4', 'old4']],
columns = ['dum', 'old'] )
mains = pd.DataFrame([
['dum2', 'not_used2'],
['dum3', 'not_used3'],
['dum3', 'not_used4']],
columns = ['Datecomb', 'NotUsed'])