Самый простой вариант:
# представим 1.csv как list из list (здесь разделитель ";" )
with open('1.csv') as f1:
csv1 = [x.split(';') for x in f1.readlines()]
# 2.csv просто как list
with open('2.csv') as f2:
csv2 = f2.readlines()
result = []
# для каждого элемента в csv1
for entry in csv1:
# проверяем его 40ой элемент на вхождение в list csv2
if entry[40] in csv:
# если да, то перекидываем нужный нам entry в result
result.append(entry)
with open('result.csv', 'w') as fo:
fo.writelines(result)
Тут нет никаких проверок - исходим из того что оба csv не содержат пустых строк и подобного добра :)
Это не самое быстрое решение, но самое наглядное.