Вы можете использовать Series.isin df1.col1.isin(df2.col2).sum()
:
df1 = pd.DataFrame({'col1': [1, 2, 3, 4, 5, 6]})
df2 = pd.DataFrame({'col2': [1, 3, 5, 7]})
nb_comon_elements = df1.col1.isin(df2.col2).sum()
assert nb_comon_elements == 3
Будьте осторожны в зависимости от вашего варианта использования, потому что:
df1 = pd.DataFrame({'col1': [1, 1, 1, 2, 7]})
df1.col1.isin(df2.col2).sum()
вернет 4 и не 2, потому что все 1
из df1.col1
присутствуют в df2.col2
. Если это не ожидаемое поведение, вы можете удалить дубликаты из df1.col1
перед проверкой размера пересечения:
df1.col1.drop_duplicates().isin(df2.col2).sum()
Что в этом примере вернет 2.
Чтобы лучше понять, почему это происходит вы можете посмотреть, что возвращает .isin
:
df1['isin df2.col2'] = df1.col1.isin(df2.col2)
Что дает:
col1 isin df2.col2
0 1 True
1 1 True
2 1 True
3 2 False
4 7 True
Теперь .sum()
складывает логические значения из столбца isin df2.col2
(всего 4 True
).