Python:如何计算pandas数据帧中重复的几个值的数量?

时间:2017-07-27 14:58:32

标签: python pandas matrix

我有一个数据框df。由2列组成,表示矩阵M的坐标。我将矩阵M定义为

s = [5, 5]
M = np.zeros((s[1], s[0]))

现在我想添加计算在数据帧中调用相同单元格的次数

df

       x      y  
0      1      4      
1      0      2      
3      3      1     
4      4      2     
5      4      2     
4      2      0     

我正在做的是以下内容:

for i in df.index:
    M[df['x'][i]][df['y'][i]] += 1

我想以更优雅的方式进行,也许可以对pandas数据帧进行分组。

输出应生成一个数据框df1,用于计算重复xy次的次数,因此:

DF1

       x      y  count  
0      1      4    1  
1      0      2    1  
3      3      1    1 
4      4      2    2 
5      2      0    1

和矩阵M

M

array([[ 0.,   0.,  1.0,  0.,   0.],
       [ 0.,   0.,  0.,   1.0,  0.],
       [ 1.0,  0.,  0.,   0.,   0.],
       [ 0.,   1.,  0.,   0.,   0.],
       [ 0.,   0.,  2.,   0.,   0.]])

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作并重新索引轴以覆盖缺失的值:

M = (df.groupby(['x','y'])['x']
       .count()
       .unstack()
       .reindex(index=np.arange(df.x.max()+1),
                columns=np.arange(df.y.max()+1))
       .fillna(0)
       .values)

输出:

[[ 0.  0.  1.  0.  0.]
 [ 0.  0.  0.  0.  1.]
 [ 1.  0.  0.  0.  0.]
 [ 0.  1.  0.  0.  0.]
 [ 0.  0.  2.  0.  0.]]