所以我有一些数据:
Epoch Object User
1418409833 1 1
1418409834 1 2
1418409835 1234 1
1418409836 1234 1
1418409836 1589 2
1418409837 9 1
1418409838 9 2
如何将此帧转换为如此的numpy矩阵:
[ 1 2 0 1
1 0 1 1]
每行是用户,每列是直方图bin值。 因此,在这种情况下,用户1具有2个对象1234的计数,因此第二个索引是2。
但请注意,此处用户2没有对象1234,因此在该对应列中需要0。
用例用于scikit-learn分类器。
答案 0 :(得分:2)
您可以使用groupby
按用户分组,value_counts
计算直方图,unstack
重新整形结果:
In [13]: df
Out[13]:
Epoch Object User
0 1418409833 1 1
1 1418409834 1 2
2 1418409835 1234 1
3 1418409836 1234 1
4 1418409836 1589 2
5 1418409837 9 1
6 1418409838 9 2
In [14]: df.groupby(['User'])['Object'].value_counts().unstack(level=1).fillna(0)
Out[14]:
1 9 1234 1589
User
1 1 1 2 0
2 1 1 0 1
然后,您可以访问values
属性以获取NumPy数组:
In [15]: df.groupby(['User'])['Object'].value_counts().unstack(level=1).fillna(0).values
Out[15]:
array([[ 1., 1., 2., 0.],
[ 1., 1., 0., 1.]])