2016-10-07 13 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) 

名前とフルーツでグルーピングを試みましたが、フルーツの総数はどのように取得しましたか?あなたがgroupbysumを使用することができます

答えて

24

使用合計()メソッド

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」という名前の列を合計することをパンダが知ることはできますか? – Kingname

3

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

どちらも他の回答は、あなたが望むものを達成します。

また、あなたはAGG機能を使用することができます

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

素敵なテーブルにデータを配置するpivot機能を使用することができ、

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

あなたは数字を合計する別の列を選択することができます。

関連する問題