假设这是数据
ID, EVENT
1 GO
1 GET
1 GO
1 COME
2 FLY
2 GO
2 LEAVE
3 GO
3 COME
....
我想要一个numpy数组,其中每一行是每个ID事件计数的直方图,例如;
假设这是事件顺序[GO,LEAVE,COME,FLY,GET]
row1 : 2, 0, 1, 0, 1
row2 : 1, 1, 0, 1, 0
row3 : 1, 0, 1, 0, 0
建议的方法是什么?
在我非常慢的实现中,我迭代所有唯一ID,找到相应的行R,迭代所有事件E,计算R中该事件的发生次数,将计数放入我的numpy中该id的行阵列。
答案 0 :(得分:1)
您可以使用pandas.groupby,然后使用pandas.unstack:
>>> df
ID EVENT
0 1 GO
1 1 GET
2 1 GO
3 1 COME
4 2 FLY
5 2 GO
6 2 LEAVE
7 3 GO
8 3 COME
>>> df.groupby(['ID', 'EVENT']).size().unstack().fillna(0)
EVENT COME FLY GET GO LEAVE
ID
1 1 0 1 2 0
2 0 1 0 1 1
3 1 0 0 1 0
>>> _.reindex_axis(['GO', 'LEAVE', 'COME', 'FLY', 'GET'], axis=1)
EVENT GO LEAVE COME FLY GET
ID
1 2 0 1 0 1
2 1 1 0 1 0
3 1 0 1 0 0