我正在尝试根据另一个数据框(dfA
)中的值向数据框(dfB
)中添加新列:
s = dfA['value'].tolist()
dfB['value'] = dfB['text_bod'].str.contains('|'.join(s))
progress_map
可以用于此设置吗?
dfB['value] = 'dfB['text_bod].progress_map(func)'
或者还有其他可以实现tqdm的方法吗?
使用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))
答案 0 :(得分:1)
不知道str.contains
的方式,但是您可以将progress_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相比,这应该给您更大的灵活性。