如何使每个组的第一行成为熊猫数据帧中同一组中其他行的总和?

时间:2019-12-15 05:55:44

标签: python pandas numpy

假设我有一个如下所示的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

我花了几天时间试图弄清楚该怎么做,最后我投降了,希望这个伟大社区中的某个人能有所帮助。

1 个答案:

答案 0 :(得分:4)

这是一种方法:

grp = df.groupby('B')

方法1(类似于@Kent删除的答案):

s=grp['A'].transform('sum').sub(df['A'])
idx=grp.head(1).index
df.loc[idx,'A']=s

方法2:

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