2017-04-05 30 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