机器学习的数据转换

3
我有一个SKU ID及其数量的数据集,需要将这些数据以一种让SKU ID成为列且交易ID和SKU ID之间的COUNT在交叉点上的方式输入到机器学习算法中。请问是否有人能够建议如何实现这种转换。
当前数据:
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个回答

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

或者“传播”。
library(tidyr)
spread(df1, SKUID, COUNT, fill=0)

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
在GraphLab/SFrame中,相关的命令是unstackunpack
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='')

缺失的值可以按列填充:
for c in out.column_names():
    out[c] = out[c].fillna(0)

out.print_rows()

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接