首页 > 解决方案 > 如何将每个组的第一行作为熊猫数据框中同一组中其他行的总和?

问题描述

假设我有一个看起来像这样的 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

我花了几天时间试图弄清楚如何做到这一点,最后我投降了,希望这个伟大社区中的某个人能提供帮助。

标签: pythonpandasnumpy

解决方案


这是一种方法:

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

推荐阅读