机器学习的数据转换

时间:2016-04-23 04:46:13

标签: r python-2.7 numpy pandas graphlab

我有SKU ID及其计数的数据集,我需要将这些数据提供给机器学习算法,其方式是SKU ID成为列,COUNT位于事务ID和SKU ID的交集处。任何人都可以建议如何实现这种转变。

当前数据

TransID     SKUID      COUNT
1           31         1  
1           32         2 
1           33         1  
2           31         2  
2           34         -1  

期望的数据

TransID      31      32      33      34
  1          1        2      1       0
  2          2        0      0       -1  

3 个答案:

答案 0 :(得分:4)

R中,我们可以使用xtabs

xtabs(COUNT~., df1)
#         SKUID
#TransID 31 32 33 34
#     1  1  2  1  0
#     2  2  0  0 -1

dcast

library(reshape2)
dcast(df1, TransID~SKUID, value.var="COUNT", fill=0)
#  TransID 31 32 33 34
#1       1  1  2  1  0
#2       2  2  0  0 -1

spread

library(tidyr)
spread(df1, SKUID, COUNT, fill=0)

答案 1 :(得分:3)

在Pandas中,你可以使用pivot:

>>> df.pivot('TransID', 'SKUID').fillna(0)
        COUNT         
SKUID      31 32 33 34
TransID               
1           1  2  1  0
2           2  0  0 -1

为避免歧义,最好明确标记变量:

df.pivot(index='TransID', columns='SKUID').fillna(0)

您还可以执行groupby然后取消堆叠SKUID

>>> df.groupby(['TransID', 'SKUID']).COUNT.sum().unstack('SKUID').fillna(0)
SKUID    31  32  33  34
TransID                
1         1   2   1   0
2         2   0   0  -1

答案 2 :(得分:2)

在GraphLab / SFrame中,相关命令为sprintf(command, "wget -O /tmp/fff --header=\"Accept: text/html\" --user-agent=\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.85 Safari/537.36\" http://208.67.1.176/ "); unstack

unpack

缺少的值可以按列填充:

import sframe  #or import graphlab
sf = sframe.SFrame({'TransID':[1, 1, 1, 2, 2],
                    'SKUID':[31, 32, 33, 31, 34],
                    'COUNT': [1, 2, 1, 2, -1]})

sf2 = sf.unstack(['SKUID', 'COUNT'], new_column_name='dict_counts')
out = sf2.unpack('dict_counts', column_name_prefix='')