2017-04-05 35 views
2

之前可能會提出類似的問題,但我找不到適合我的問題的確切問題。 我想根據兩列進行分組。 對於〔實施例,使這個如何根據熊貓中的兩列進行groupby?

id product quantity 
1 A  2 
1 A  3 
1 B  2 
2 A  1 
2 B  1 
3 B  2 
3 B  1 

進入這個:

id product quantity 
1 A  5 
1 B  2 
2 A  1 
2 B  1 
3 B  3 

意義上相同的「ID」,「數量」欄和相同的「產品」是求和。

回答

4

您需要groupby與參數as_index=False退貨DataFrame和聚合mean

df = df.groupby(['id','product'], as_index=False)['quantity'].sum() 
print (df) 
    id product quantity 
0 1  A   5 
1 1  B   2 
2 2  A   1 
3 2  B   1 
4 3  B   3 

或者添加reset_index

df = df.groupby(['id','product'])['quantity'].sum().reset_index() 
print (df) 
    id product quantity 
0 1  A   5 
1 1  B   2 
2 2  A   1 
3 2  B   1 
4 3  B   3 
4

您可以使用pivot_tableaggfunc='sum'

df.pivot_table('quantity', ['id', 'product'], aggfunc='sum').reset_index() 

    id product quantity 
0 1  A   5 
1 1  B   2 
2 2  A   1 
3 2  B   1 
4 3  B   3 
1

您可以使用groupbyaggregate功能

import pandas as pd 
df = pd.DataFrame({ 
    'id': [1,1,1,2,2,3,3], 
    'product': ['A','A','B','A','B','B','B'], 
    'quantity': [2,3,2,1,1,2,1] 
}) 

print df 

    id product quantity 
0 1  A  2 
1 1  A  3 
2 1  B  2 
3 2  A  1 
4 2  B  1 
5 3  B  2 
6 3  B  1 


df = df.groupby(['id','product']).agg({'quantity':'sum'}).reset_index() 
print df 

    id product quantity 
0 1  A  5 
1 1  B  2 
2 2  A  1 
3 2  B  1 
4 3  B  3