2016-08-13 36 views
1

,我有以下的數據幀:集團由兩列和計算每個組合的大熊貓出現

data = pd.DataFrame({'user_id' : ['a1', 'a1', 'a1', 'a2','a2','a2','a3','a3','a3'], 'product_id' : ['p1','p1','p2','p1','p1','p1','p2','p2','p3']}) 

product_id user_id 
    p1  a1 
    p1  a1 
    p2  a1 
    p1  a2 
    p1  a2 
    p1  a2 
    p2  a3 
    p2  a3 
    p3  a3 

在現實情況下,可能有一些其他列一樣好,但我需要做的是組由數據幀由PRODUCT_ID和USER_ID列和計數每個組合的數量和在一個新的DAT幀添加作爲新的列

輸出應該是這樣的:

user_id product_id count 
a1  p1   2 
a1  p2   1 
a2  p1   3 
a3  p2   2 
a3  p3   1 

我曾嘗試下面的代碼:

grouped=data.groupby(['user_id','product_id']).count() 

但結果是:

user_id product_id 
a1  p1 
      p2 
a2  p1 
a3  p2 
      p3 

其實對我來說最重要的是有一個具有發生次數列名計數,我需要稍後使用該列。

+0

的可能的複製[Python的:獲得基於兩列(變量)在大熊貓數據幀的頻率計數(http://stackoverflow.com/questions/33271098/python-get-a-frequency-count-基於兩列變量的熊貓數據庫) – Merlin

回答

4

也許這就是你想要的?

>>> data = pd.DataFrame({'user_id' : ['a1', 'a1', 'a1', 'a2','a2','a2','a3','a3','a3'], 'product_id' : ['p1','p1','p2','p1','p1','p1','p2','p2','p3']}) 
>>> count_series = data.groupby(['user_id', 'product_id']).size() 
>>> count_series 
user_id product_id 
a1  p1   2 
     p2   1 
a2  p1   3 
a3  p2   2 
     p3   1 
dtype: int64 
>>> new_df = count_series.to_frame(name = 'size').reset_index() 
>>> new_df 
    user_id product_id size 
0  a1   p1  2 
1  a1   p2  1 
2  a2   p1  3 
3  a3   p2  2 
4  a3   p3  1 
>>> new_df['size'] 
0 2 
1 1 
2 3 
3 2 
4 1 
Name: size, dtype: int64 
+0

是的,非常接近,但我怎麼能讓他們在一個新的數據框,特別是那些大小的數字作爲例如'大小'的列名稱? – sanaz

+0

其實我有R背景,這個任務可以很容易地使用dplyr摘要和count() – sanaz

+0

@sanaz我已經更新了答案。 –