python - CountTokenizing 字段,变成列

标签 python pandas numpy scikit-learn

我正在处理如下所示的数据:

ID      PATH         GROUP  
11937   MM-YT-UJ-OO  GT  
11938   YT-RY-LM     TQ  
11939   XX-XX-OT     DX  

我想将 PATH 列标记为 n-gram,然后将它们一次性编码到它们自己的列中,这样我最终会得到如下结果:

ID     GROUP   MM  YT  UJ  OO  RY  LM  XX  OT  MM-YT  YT-UH ...  
11937  GT      1   1   1   1   0   0   0   0   1      1

我还可以使用计数标记而不是单热标记,因此 11939 在 XX 列中将有一个 2 而不是 1,但我可以使用其中任何一个。

我可以使用 scikitlearn CountVectorizer 轻松标记该列,但随后我必须绑定(bind) IDGROUP 字段。是否有执行此操作的标准方法或任何人都发现的最佳实践?

最佳答案

解决方案:

df.set_index(['ID', 'GROUP'], inplace=True)
pd.get_dummies(df.PATH.str.split('-', expand=True).stack())\
              .groupby(level=[0,1]).sum().reset_index()
<小时/>

将 ID 列和 GROUP 列隔离为索引。然后将字符串转换为单元格项目

df.PATH.str.split('-', expand=True)
Out[37]: 
              0   1   2     3
ID    GROUP                  
11937 GT     MM  YT  UJ    OO
11938 TQ     YT  RY  LM  None
11939 DX     XX  XX  OT  None

将它们放入单列数据中

df.PATH.str.split('-', expand=True).stack()
Out[38]: 
ID     GROUP   
11937  GT     0    MM
              1    YT
              2    UJ
              3    OO
11938  TQ     0    YT
              1    RY
              2    LM
11939  DX     0    XX
              1    XX
              2    OT

get_dummies 在列跨行分布时显示计数器

pd.get_dummies(df.PATH.str.split('-', expand=True).stack())
Out[39]: 
               LM  MM  OO  OT  RY  UJ  XX  YT
ID    GROUP                                  
11937 GT    0   0   1   0   0   0   0   0   0
            1   0   0   0   0   0   0   0   1
            2   0   0   0   0   0   1   0   0
            3   0   0   1   0   0   0   0   0
11938 TQ    0   0   0   0   0   0   0   0   1
            1   0   0   0   0   1   0   0   0
            2   1   0   0   0   0   0   0   0
11939 DX    0   0   0   0   0   0   0   1   0
            1   0   0   0   0   0   0   1   0
            2   0   0   0   1   0   0   0   0

按 ID、GROUP(索引中的级别 0 和 1)对数据进行分组,以将行汇总在一起,并且每个元组一行。最后重置索引以将 ID 和 GROUP 列恢复为常规列。

关于python - CountTokenizing 字段,变成列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39985351/

相关文章:

Python 程序仅在我按下回车键时出现

python - 用户警告 : Calling close() on already closed file. 警告 ("Calling close() on already closed file.")

python - Scipy 的四元组在 "pretty smooth"函数上失败

python - Scikit 网格搜索 KNN 回归 ValueError : Array contains NaN or infinity

python - Python 2 何时考虑一个函数 "greater than"或 "less than"另一个函数?

python - 距离矩阵的坐标列表

python - 属性错误: 'str' object has no attribute 'hist'

python - 图未填充窗口 python

python - 对 python 脚本文件的说明

python - 将天数添加到日期时间对象