如何在python中逐行查找列中的任何单词是否与另一列中的任何单词匹配

时间:2018-08-14 16:19:14

标签: python pandas dataframe lambda

我正在尝试查看python数据框中的colB中是否包含来自colA的任何单词。

示例数据

ColA                    ColB            Match
this is some text       some text       TRUE
some more text          more            TRUE
another line text       nothing to see  FALSE
my final line           dog cats goats  FALSE

desc拆分字符串,emp拆分字符串 如果emp中的任何单词= desc中的任何单词,则为true,否则为false

类似...

df['Match'] = df['colA'].str.split().apply(lambda x: 'true' if any x in df['ColB'].str.split() else 'false')

thx

3 个答案:

答案 0 :(得分:2)

您可以在整个行上使用apply,如下所示:

df.apply(lambda x: np.any([word in x.ColB.split(' ') for word in x.ColA.split(' ')]),axis = 1)

答案 1 :(得分:2)

也许使用issubset

[set(y).issubset(set(x)) for x , y  in zip(df.ColA.str.split(),df.ColB.str.split())]
Out[57]: [True, True, False, False]

如果我们只需要比赛

[len(list(set(x) & set(y)))>0 for x , y  in zip(df.ColA.str.split(),df.ColB.str.split())]
Out[61]: [True, True, False, False]

答案 2 :(得分:0)

您可以将列表理解与zip和自定义函数一起使用:

def find_words(words, val):
    val_split = val.split()
    return any(x in val_split for x in words.split())

df['Match'] = [find_words(a, b) for a, b in zip(df['ColA'], df['ColB'])]