Python 如何将每个组的第一行作为数据帧中同一组中其他行的总和?

Python 如何将每个组的第一行作为数据帧中同一组中其他行的总和?,python,pandas,numpy,Python,Pandas,Numpy,假设我有一个熊猫数据框,看起来像这样: 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  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   
因此,第一组的第一行(根据B列分组)在A列中有259,因为除第一行外,第1组的值为78+53+44+84=259

对于组2,组2的第一行是156,因为63+13+56+24=156

我花了好几天的时间试图找出如何做到这一点,最后我投降了,希望这个伟大的社区中有人能帮助我

这里有一种方法:

grp = df.groupby('B')

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


方法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



您的数据是否已按“B”排序?
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