如何基于pandas中的两列进行分组?

时间:2017-04-05 04:58:17

标签: python pandas dataframe group-by pandas-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"和#34;产品"。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分: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
相关问题