Regex 如何将pandas.Series.str.contains与TQM进度图一起使用?

Regex 如何将pandas.Series.str.contains与TQM进度图一起使用?,regex,pandas,tqdm,Regex,Pandas,Tqdm,我正在尝试根据另一个数据帧(dfB)的值向数据帧(dfA)添加一个新列: progress\u map可以用于此设置吗 dfB['value]='dfB['text\u bod]。进度图(func) 或者是否有其他方法可以实现TQM 使用FlashText的替代方法: from flashtext import KeywordProcessor s = dfA['value'].tolist() processor = KeywordProcessor() processor.add_ke

我正在尝试根据另一个数据帧(
dfB
)的值向数据帧(
dfA
)添加一个新列:

progress\u map
可以用于此设置吗

dfB['value]='dfB['text\u bod]。进度图(func)

或者是否有其他方法可以实现TQM


使用FlashText的替代方法:

from flashtext import KeywordProcessor

s = dfA['value'].tolist()

processor = KeywordProcessor()
processor.add_keywords_from_list(s)

dfB['value'] = dfB['text_bod'].progress_map(lambda x: processor.extract_keywords(x))

不知道
str.contains
方式,但您可以使用
progress\u map
和执行完全相同操作的回调,但使用
re.search

import re
dfB['value'] = dfB['text_bod'].progress_map(
    lambda x: bool(re.search('|'.join(s), x))
)

作为函数,您可以使用

def extract(x, p):
    m = p.search(x)
    if m:
        return m.groups(0)
    return np.nan

p = re.compile('|'.join(s))
dfB['value'] = dfB['text_bod'].progress_map(lambda x: extract(x, p))

这将使您比lambda更具灵活性。

尝试一下真是太棒了!用我的测试数据运行大约需要2个小时。有没有一种方法可以让它从第一个数据帧或NaN if DNE而不是True/False输出值?@lauren.he你的意思是类似于
dfB['text_bod']的东西。progress_map(lambda x:x if re.search('.|'。join(s),x)else np.NaN)
?啊,我几乎认为这给出了找到值的整个文本体。我想从
dfA['value']
中提取单个匹配值,并将其放入
dfB['value']
这似乎有效:
test['value']=test['communication\u body'].progress\u map(lambda x:re.search('|'.join(s),x)。如果re.search('|'.join(s),x)则为组(0)
不支持多个匹配值hmmm@lauren.he您不需要调用
re.search
两次。您可以定义一个函数
def foo(x,s):
并在那里实现您的代码。lambda对于代码的运行并不重要,可以是任何函数。
def extract(x, p):
    m = p.search(x)
    if m:
        return m.groups(0)
    return np.nan

p = re.compile('|'.join(s))
dfB['value'] = dfB['text_bod'].progress_map(lambda x: extract(x, p))