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