使用字典键对列进行分类-多值对

时间:2019-03-15 20:43:43

标签: python pandas numpy dictionary logic

我有字典:

'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的原因是因为我们可以将多个值映射到一个类别,如果没有字典,还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

IIUC重新创建了dict的{​​{1}}后,将其映射回

findall

答案 1 :(得分:1)

这也可以使用renp.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 分隔的模式组成。然后使用矢量化将此正则表达式搜索映射到找到对应的组名的每个项目