2016-10-07 138 views
19

我使用這個數據幀:熊貓集團,通過與和

Fruit Date Name Number 
Apples 10/6/2016 Bob 7 
Apples 10/6/2016 Bob 8 
Apples 10/6/2016 Mike 9 
Apples 10/7/2016 Steve 10 
Apples 10/7/2016 Bob 1 
Oranges 10/7/2016 Bob 2 
Oranges 10/6/2016 Tom 15 
Oranges 10/6/2016 Mike 57 
Oranges 10/6/2016 Bob 65 
Oranges 10/7/2016 Tony 1 
Grapes 10/7/2016 Bob 1 
Grapes 10/7/2016 Tom 87 
Grapes 10/7/2016 Bob 22 
Grapes 10/7/2016 Bob 12 
Grapes 10/7/2016 Tony 15 

我想通過名字來此聚集,然後用水果,讓每名水果的總數。

Bob,Apples,16 (for example) 

我試着按名稱和水果分組,但是如何獲得水果總數。

回答

24

使用SUM()方法

df.groupby(['Fruit','Name']).sum() 

Out[31]: 
       Number 
Fruit Name   
Apples Bob  16 
     Mike  9 
     Steve  10 
Grapes Bob  35 
     Tom  87 
     Tony  15 
Oranges Bob  67 
     Mike  57 
     Tom  15 
     Tony  1 
+1

鑑於'groupby'參數列表中的順序,數據不會先被分組到名稱中,然後按每個賣家的水果分組嗎? –

+0

@p_sutherland你是對的,更正了。 –

+2

大熊貓如何知道我想對名爲'Number'的col進行求和? – Kingname

3

您可以使用groupbysum

df.groupby(['Name', 'Fruit']).sum() 

       Number 
Name Fruit   
Bob Apples  16 
     Grapes  35 
     Oranges  67 
Mike Apples  9 
     Oranges  57 
Steve Apples  10 
Tom Grapes  87 
     Oranges  15 
Tony Grapes  15 
     Oranges  1 
6

兩個其他的答案完成你想要的。

可以使用pivot功能在一個不錯的表

df.groupby(['Fruit','Name'],as_index = False).sum().pivot('Fruit','Name').fillna(0) 



Name Bob  Mike Steve Tom Tony 
Fruit     
Apples 16.0 9.0  10.0 0.0  0.0 
Grapes 35.0 0.0  0.0  87.0 15.0 
Oranges 67.0 57.0 0.0  15.0 1.0 
6

您也可以使用AGG函數來安排數據,

df.groupby(['Name', 'Fruit'])['Number'].agg('sum') 
0
df.groupby(['Fruit','Name'])['Number'].sum() 

您可以選擇不同的列總結號碼。