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
这就成功了。而且速度非常快。谢谢很高兴我能帮忙:)