Вот подход на основе NumPy через np.isin
, который проверяет каждое значение в 2d-массиве против 1d-массива.Но на самом деле это следует рассматривать как последнее средство: списки в серии неэффективны, и вы столкнетесь с проблемами производительности для больших наборов данных.
Примечание argmax
будет проверять только совпадение first , если несколькосовпадения существуют в списке.
import pandas as pd, numpy as np
df1 = pd.DataFrame({'x': list('aws'), 'y': list('brt'), 'z': list('ctq'),
'm': [['apple', 'iphone', 'watch', 'newdevice'],
['google', 'pixel'], ['india', 'computer']]})
split = pd.DataFrame(df1['m'].values.tolist()).values
mask = np.isin(split, df2['new'].values).argmax(1)
df1['new'] = split[np.arange(split.shape[0]), mask]
df = pd.merge(df1, df2, on='new', how='left').drop('new', 1)
print(df)
x y z m code file
0 a b c [apple, iphone, watch, newdevice] appl ofo
1 w r t [google, pixel] ggle ofg
2 s t q [india, computer] NaN NaN