Python 根据同一行中是否存在单词,查找两列是否匹配

Python 根据同一行中是否存在单词,查找两列是否匹配,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个包含两列感兴趣的数据框。我想试着逐字比较这两列,看看是否有单词重叠。如果是这样,我想附加一列,指示在行中找到匹配的单词 以下是我的数据帧示例: df name1 name2 0 cat nip giant cat 1 bad dog blue sky 2 slow snail slimy snail 3 tall tree big boy 以下是我想要的: df name1 name2 found 0 c

我有一个包含两列感兴趣的数据框。我想试着逐字比较这两列,看看是否有单词重叠。如果是这样,我想附加一列,指示在行中找到匹配的单词

以下是我的数据帧示例:

df
    name1      name2
0   cat nip    giant cat
1   bad dog    blue sky
2   slow snail slimy snail
3   tall tree  big boy
以下是我想要的:

df
    name1      name2       found
0   cat nip    giant cat   True
1   bad dog    blue sky    False
2   slow snail slimy snail True
3   tall tree  big boy     False
我试过很多方法。一种方法是使用以下代码:

df['found'] = df['name1'].apply(lambda x: any(i in df['name2'] for i in x))
glossary = list(set(df['name1']))
pattern = '|'.join(glossary)
check = df[(df.name1.str.contains(pattern))& 
        (df.name2.str.contains(pattern))]
这没用。第二种方法是使用以下代码:

df['found'] = df['name1'].apply(lambda x: any(i in df['name2'] for i in x))
glossary = list(set(df['name1']))
pattern = '|'.join(glossary)
check = df[(df.name1.str.contains(pattern))& 
        (df.name2.str.contains(pattern))]
这段代码也不起作用,它正在创建一个新的数据帧(我不想要)。而且两种方法都很慢。有没有正确的方法

另外,我已经尝试了
isin
方法:

df['found'] = df['name1'].isin(df['name2'])

这也不行。它给了我许多假
True
标签。

您可以使用一个简单的解决方案,在系列之间使用
&

首先将列表设置为
set

transf_1 = df.name1.str.split(" ").transform(set)
transf_2 = df.name2.str.split(" ").transform(set)
那就

>>> transf_1 & transf_2.values

0     True
1    False
2     True
3    False
或者试试这个:

df['found'] = [True if set(i['name1'].split()).intersection(i['name2'].split()) else False for idx,i in df.iterrows()]
print(df)
输出:

    name1      name2       found
0   cat nip    giant cat   True
1   bad dog    blue sky    False
2   slow snail slimy snail True
3   tall tree  big boy     False

这就成功了。而且速度非常快。谢谢很高兴我能帮忙:)