熊猫groupby sum,在结果数据框中保留特定的列

时间:2019-10-09 12:09:20

标签: python pandas dataframe aggregate slice

假设我具有以下数据集。

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      

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

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

如何获得后一个结果?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

如果可能,每个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

或者如果需要在另一列中添加任何内容,则需要汇总所有列,例如通过firstlast

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
相关问题