我有一个包含两列感兴趣的数据框。我想尝试按单词比较两列并找出是否有单词重叠。如果是这样,我想附加一列来指示在该行中找到了匹配的单词。
这是我的数据框的示例:
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))]
这段代码也不起作用,它正在创建一个新的数据帧(我不想要)。而且这两种方法都非常慢。有什么想法可以正确地做到这一点吗?
此外,我已经尝试过 isin
方法:
df['found'] = df['name1'].isin(df['name2'])
这也不起作用。它给了我很多错误的True
标签。
最佳答案
您可以在系列之间使用 &
来使用简单的解决方案。
第一transform
您要设置
的列表
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
关于python - 根据同一行中是否存在单词查找两列是否匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51052867/