首页 > 解决方案 > Pandas groupby sum,在结果数据框中保留特定列

问题描述

假设我有以下数据集。

Name   Asset    Group   PN
Anton  10       Admin   124223
Brad   15       Planer  774555
Kevin  20       Admin   234987
Brad   10       Planer  774555
Peter  25       Planer  861254
Anton  10       Admin   124223
Peter  5        Planer  861254
Kevin  35       Admin   234987
David  10       AT      561256 

现在我想聚合列名,所以我这样做:

agg = df.groupby('Name', as_index=False)['Asset'].sum()

奇迹般有效。我的输出如下所示:

Name   Asset    
Anton  20       
Brad   25       
Kevin  55       
Peter  30       
David  10      

但是,我想保留列“组”而不更改此列的任何内容,因此我的输出将如下所示:

Name   Asset   Group 
Anton  20      Admin 
Brad   25      Planer 
Kevin  55      Admin 
Peter  30      Planer 
David  10      AT

我怎样才能达到后一个结果?

非常感谢您的帮助!

标签: pythonpandasdataframeaggregateslice

解决方案


如果可能,每个Name人都有相同的组,然后将列添加到列表并聚合sum

agg = df.groupby(['Name', 'Group'], as_index=False, sort=False)['Asset'].sum()
print (agg)
    Name   Group  Asset
0  Anton   Admin     20
1   Brad  Planer     25
2  Kevin   Admin     55
3  Peter  Planer     30
4  David      AT     10

或者,如果需要添加任何另一列,则需要聚合所有列,例如 byfirstlast

agg = (df.groupby('Name', as_index=False, sort=False)
         .agg({'Asset':'sum', 'Group':'first', 'PN':'last'}))
print (agg)
    Name  Asset   Group      PN
0  Anton     20   Admin  124223
1   Brad     25  Planer  774555
2  Kevin     55   Admin  234987
3  Peter     30  Planer  861254
4  David     10      AT  561256

推荐阅读