2017-07-27 70 views
0

我有一個數據框df。由2列組成,表示Matrix的座標M。我所定義的矩陣M作爲Python:如何計算熊貓數據框中重複的數值的數量?

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 

我想以一種更優雅的方式做它,也許分組熊貓數據框。

輸出應該產生一個數據幀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.]]) 
+4

您的問題不匹配內容的標題。請修復。 –

+0

你也可以添加你想要的輸出嗎? – FLab

+0

[獲取pandas數據框中所有唯一行的計數]的可能重複(https://stackoverflow.com/questions/34255882/get-count-of-all-unique-rows-in-pandas-dataframe) –

回答

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.]]