我想创建一个包含1或0的新列,如果列表中的任何单词与数据帧字符串列匹配为exaclty。
列表中的单词之间可能有多个空格,因此我无法使用str.split()进行完全匹配。
object<int>
预期输出
C++17
对list元素中单词的排序也很重要!!
代码尝试到现在
list_provided=["mul the","a b c"]
#how my dataframe looks
id text
a simultaneous there the
b simultaneous there
c mul why the
d mul the
e simul a b c
f a c b
如何获取预期输出,我必须在列表中搜索单词与数据帧字符串列的完全匹配,中间有多个空格?
答案 0 :(得分:1)
你几乎就在那里,你已经完成了所有的基础工作,现在剩下的就是调用正确的功能,在这种情况下,str.contains
。
data['found'] = data.text.str.contains(pattern).astype(int)
data
id text found
0 a simultaneous there the 0
1 b simultaneous there 0
2 c mul why the 0
3 d mul the 1
4 e simul a b c 1
5 f a c b 0
如果您的模式本身包含正则表达式OR管道,请先尝试转义它们:
import re
pattern = '|'.join([re.escape(i) for i in list_of_word])
答案 1 :(得分:0)
你可以在str.contains的帮助下实现这一目标。这也可以占用正则表达式!
data['found'] = np.where(data['text'].str.contains(pattern),1,0)