Сначала мы используем explode
(версия pandas> = 0.25.0), чтобы преобразовать несколько категорий в столбце в несколько строк, а затем merge
в категориях и отбрасываемдубликаты:
import pandas as pd
from numpy import nan
dfp = pd.DataFrame({'contentId': {0: nan, 1: 2.0, 2: nan, 3: 4.0, 4: 5.0, 5: 6.0, 6: nan, 7: 8.0, 8: 9.0}, 'Categories': {0: '1', 1: '12;2', 2: '3', 3: '2', 4: '3;15', 5: '15', 6: '7', 7: '20', 8: '20;2'}})
dfu = pd.DataFrame({'intrestcategories': {0: '12;2', 1: '3', 2: '15'}, 'userid': {0: 2, 1: 3, 2: 4}})
dfp.Categories = dfp.Categories.str.split(';')
dfp = dfp.explode('Categories')
dfu.intrestcategories = dfu.intrestcategories.str.split(';')
dfu = dfu.explode('intrestcategories')
dfp.dropna().merge(dfu,left_on='Categories',right_on='intrestcategories')[['userid','contentId']].drop_duplicates().astype(int)
Результат:
userid contentId
0 2 2
2 2 4
3 2 9
4 3 5
5 4 5
6 4 6