2016-09-09 107 views
3

我是新來的DataFrames,我想分組多個列,然後總結並保留最後一列的計數。例如按大小寫分組創建兩個聚合列大熊貓

s = pd.DataFrame(np.matrix([[1, 2,3,4], [3, 4,7,6],[3,4,5,6],[1,2,3,7]]), columns=['a', 'b', 'c', 'd']) 

    a b c d 
0 1 2 3 4 
1 3 4 7 6 
2 3 4 5 6 
3 1 2 3 7 

我想小組abc但再總結上d和計數組內的元素。 我可以

s = s.groupby(by=["a", "b", "c"])["d"].count() 

    a b c 
    1 2 3 2 
    3 4 5 1 
      7 1 

計數和不過,我想結合這使得產生的數據框具有總和及數列,我可以通過

s = s.groupby(by=["a", "b", "c"])["d"].sum() 

a b c 
1 2 3 11 
3 4 5  6 
     7  6 

總結。

a b c sum count 
    1 2 3 11  2 
    3 4 5  6  1 
      7  6  1 

回答

1

您可以使用aggregate,或較短的版本agg

print (s.groupby(by=["a", "b", "c"])["d"].agg([sum, 'count'])) 
#print (s.groupby(by=["a", "b", "c"])["d"].aggregate([sum, 'count'])) 
     sum count 
a b c    
1 2 3 11  2 
3 4 5 6  1 
    7 6  1 

Pandas documentation

sizecount之間的區別是:

size計數NaN值,count沒有。

如果需要數NaN值也:

print (s.groupby(by=["a", "b", "c"])["d"].agg([sum, 'size'])) 
     sum size 
a b c   
1 2 3 11  2 
3 4 5 6  1 
    7 6  1