假设我具有以下数据集。
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
如何获得后一个结果?
非常感谢您的帮助!
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
或者如果需要在另一列中添加任何其他列,则需要汇总所有列,例如通过first
或last
:
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