Идея ltest, если соответствует col1
значение в col2
и для общего решения возвращает значение по умолчанию, здесь no match
, если значение не существует:
f = lambda x: next(iter([y for y in df['col2'].tolist() if str(x) in y]), 'no match')
df['new'] = df['col1'].apply(f)
print (df)
col1 col2 new
1 123 123, 562, 7779 123, 562, 7779
2 456 456, 111, 123 456, 111, 123
3 789 667, 1213, 456 1011, 444, 909, 789
4 1011 1213, 445, 909, 123 1011, 444, 909, 789
5 1213 1011, 444, 909, 789 667, 1213, 456
Также работает для списка значений:
df['new'] = df['col1'].apply(f)
print (df)
col1 col2 new
1 123 [123, 562, 7779] [123, 562, 7779]
2 456 [456, 111, 123] [456, 111, 123]
3 789 [667, 1213, 456] [1011, 444, 909, 789]
4 1011 [1213, 445, 909, 123] [1011, 444, 909, 789]
5 1213 [1011, 444, 909, 789] [667, 1213, 456]