python - 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
我怎样才能达到后一个结果?
非常感谢您的帮助!
解决方案
如果可能,每个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
或者,如果需要添加任何另一列,则需要聚合所有列,例如 byfirst
或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
推荐阅读
- firebase - How to remove MainActivity and UIViewController from screen tracking in React Native Firebase Analytics?
- javascript - 需要访问 div 中的所有文本并将文本的颜色更改为白色
- laravel - 为 foreach() 提供的参数无效(查看:/home/anis/OrangeFormation/resources/views/admin.blade.php)
- oracle - 尝试通过 SQL 加载程序更新表时出错
- android - 使用改造和 kotlin 通道实现长轮询
- c++ - 如何在 C++ 中使用无序映射
- python - 在 Tensorflow 中使用 GPU 内核进行并行计算
- python - 如何使用 REGEX 查找除前三个之外的所有子字符串的出现?
- mysql - VB.net 'System.Collections.Generic.KeyNotFoundException' 异常
- python - 如何计算顺序排序元素之间的平均值