python - 如何将每个组的第一行作为熊猫数据框中同一组中其他行的总和?
问题描述
假设我有一个看起来像这样的 Pandas 数据框:
A B
0 67 1
1 78 1
2 53 1
3 44 1
4 84 1
5 2 2
6 63 2
7 13 2
8 56 2
9 24 2
我的目标是:
1)根据B列对A列进行分组
2) 作为 groupby() 的结果,使每个形成的组的第一行成为该组所有其他行的总和。在这种情况下,第一行中的值将被总和覆盖。
我想要的输出是:
A B
0 259 1
1 78 1
2 53 1
3 44 1
4 84 1
5 156 2
6 63 2
7 13 2
8 56 2
9 24 2
因此,第 1 组的第一行(根据 B 列分组),我们在 A 列中有 259,因为除第一行外,第 1 组的值是 78+53+44+84 = 259
对于第 2 组,第 2 组的第一行是 156,因为 63+13+56+24 = 156
我花了几天时间试图弄清楚如何做到这一点,最后我投降了,希望这个伟大社区中的某个人能提供帮助。
解决方案
这是一种方法:
grp = df.groupby('B')
方法1(类似于@Kent删除答案):
s=grp['A'].transform('sum').sub(df['A'])
idx=grp.head(1).index
df.loc[idx,'A']=s
方法二:
v= [g.iloc[1:].groupby('B')['A'].sum().iat[0] for _,g in grp]
idx = grp.head(1).index
df.loc[idx,'A'] = v
print(df)
A B
0 259 1
1 78 1
2 53 1
3 44 1
4 84 1
5 156 2
6 63 2
7 13 2
8 56 2
9 24 2
推荐阅读
- ruby-on-rails - Ruby on Rails 无法连接到 Docker 容器中的数据库主机
- django - Django 视图不向 ReactJS/Axios 应用程序发送上下文数据
- typescript - 如何创建添加黑名单用户或频道的不和谐机器人?
- python - 将多条图形线平均为一条,python 和 matplotlib
- node.js - 如何使用无服务器框架从另一个 lambda 异步调用 lambda
- c# - 如何为每个新线程创建新的类对象?
- blender - 在搅拌机 2.8 中更改线框背景
- android - 如何修复此 Kodein 错误:无法将表达式“kodein”作为函数调用。未找到函数“invoke()”
- flutter - 如何在颤振中发布这样的数据
- elasticsearch - 不同领域的不同分析仪