如何计算每个特定id组的列的项目直方图?

时间:2015-05-21 23:19:05

标签: python numpy pandas

假设这是数据

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的行阵列。

1 个答案:

答案 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