我有一个像这样的数据文件:
dataFrame = pd.DataFrame({'Name': [' Compound Mortar ',
' lime plaster ',
'mortar Screed ',
' Gypsum Plaster ',
' Gypsum Plaster 2',
' lime Plaster 233',
'Clay 23',
'Clay plaster Mortar']})我使用一个过滤器来搜索特定的单词。到目前为止,我的做法是:
dataFrame["Type"] = ""
mask1 = dataFrame["Name"].apply(lambda x: "Mortar".casefold() in "".join(x).casefold())我希望如果过滤后的单词出现在"NAME“列中,则搜索的单词将添加到"Type”列中。可能会有更多的词语被发现。例如,如果您使用了一个带有"Glue“字的新过滤器。在这种情况下,列"Type“中的对应行应该包含找到的两个关键字。(一份名单就可以了)
发布于 2022-03-13 16:26:45
你可以直接做str.findall
import re
word = ['Mortar','Clay']
dataFrame['new'] = dataFrame.Name.str.findall('|'.join(word),flags=re.IGNORECASE).map(','.join)
dataFrame
Out[776]:
Name new
0 Compound Mortar Mortar
1 lime plaster
2 mortar Screed mortar
3 Gypsum Plaster
4 Gypsum Plaster 2
5 lime Plaster 233
6 Clay 23 Clay
7 Clay plaster Mortar Clay,Mortar发布于 2022-03-13 16:16:33
试试这个:
dataFrame['Type'] = pd.concat([dataFrame['Name'].str.contains(word, case=False).map({True: word, False: ''}) for word in words], axis=1).agg(list, axis=1).str.join(',').str.strip(',')输出:
>>> dataFrame
Name Type
0 Compound Mortar Mortar
1 lime plaster
2 mortar Screed Mortar
3 Gypsum Plaster
4 Gypsum Plaster 2
5 lime Plaster 233
6 Clay 23 Clay
7 Clay plaster Mortar Mortar,Clayhttps://stackoverflow.com/questions/71458536
复制相似问题