我有字典:
'Consulting': {'Deloitte', 'EY', 'KPMG', 'PwC'},
'Education': {'.edu', 'College', 'University'},
'Government':{'state','.gov','city'},
'Corporate':{'corpor','consumer','care'},
...... etc.
我有一个数据框:
Sno Text column1 column2 ......
1 Deloitte.com
2 Texas.gov
3 smi@EY.com
4 UTD.edu
5 rapper@corporate.com
..... etc.
我想使用字典对数据框进行分类并构建列类别,如下所示:
Sno Text Category column1 column2 ......
1 Deloitte.com Consulting
2 Texas.gov Government
3 smi@EY.com Consulting
4 UTD.edu Education
5 rapper@corporate.com Corporate
..... etc.
如何在python中利用具有多个值的字典在“文本”列中查找完整短语或短语的一部分并将其分类?如果存在2个匹配项,我们还可以使用相同的逻辑吗?那会发生什么?
另外, 听起来可能有些含糊,但是我使用Dictionary的原因是因为我们可以将多个值映射到一个类别,如果没有字典,还有更好的方法吗?
答案 0 :(得分:1)
IIUC重新创建了dict
的{{1}}后,将其映射回
findall
答案 1 :(得分:1)
这也可以使用re
和np.vectorize
来完成:
cat = re.compile('|'.join(f"(?P<{k}>{'|'.join(v)})" for k,v in categories.items()))
df['category'] = np.vectorize(lambda x: cat.search(x).lastgroup)(df.text)
这给了我
text category
0 Deloitte.com Consulting
1 Texas.gov Government
2 smi@EY.com Consulting
3 UTD.edu Education
4 rapper@corporate.com Corporate
基本上,我创建一个正则表达式字符串,该字符串由类别dict键作为组名,以及值作为由|
表示or
分隔的模式组成。然后使用矢量化将此正则表达式搜索映射到找到对应的组名的每个项目