Python 将groupby总和值指定给原始表中的最后一行

Python 将groupby总和值指定给原始表中的最后一行,python,pandas,indexing,group-by,sum,Python,Pandas,Indexing,Group By,Sum,例如,我有一张桌子 A 我想要的是(最后一行sum应该是组的price的总和) 我所能做的就是使用 A['price'].groupby(A['id']).transform('sum') 但是,我不知道如何将其分配到sum列(最后一行) 谢谢您可以这样做: df.assign(sum=df.groupby('id')['price'].transform('sum').drop_duplicates(keep='last')).fillna(0) 或 输出: id price

例如,我有一张桌子

A

我想要的是(最后一行
sum
应该是组的
price
的总和)

我所能做的就是使用

A['price'].groupby(A['id']).transform('sum')
但是,我不知道如何将其分配到
sum
列(最后一行)

谢谢

您可以这样做:

df.assign(sum=df.groupby('id')['price'].transform('sum').drop_duplicates(keep='last')).fillna(0)

输出:

   id  price   sum
0   1      2   0.0
1   1      6   0.0
2   1      4  12.0
3   2      2   0.0
4   2     10   0.0
5   2      1   0.0
6   2      5  18.0
7   3      1   0.0
8   3      5   6.0

使用
last\u valid\u index
查找要填充的行

g = df.groupby('id')
l = pd.DataFrame.last_valid_index
df.loc[g.apply(l), 'sum'] = g.price.sum().values
df

   id  price  sum
0   1      2    0
1   1      6    0
2   1      4   12
3   2      2    0
4   2     10    0
5   2      1    0
6   2      5   18
7   3      1    0
8   3      5    6

为什么我总是忘记上次有效的索引?
df['sum'] = (df.groupby('id')['price']
               .transform('sum')
               .mask(df.id.duplicated(keep='last'), 0))
   id  price   sum
0   1      2   0.0
1   1      6   0.0
2   1      4  12.0
3   2      2   0.0
4   2     10   0.0
5   2      1   0.0
6   2      5  18.0
7   3      1   0.0
8   3      5   6.0
g = df.groupby('id')
l = pd.DataFrame.last_valid_index
df.loc[g.apply(l), 'sum'] = g.price.sum().values
df

   id  price  sum
0   1      2    0
1   1      6    0
2   1      4   12
3   2      2    0
4   2     10    0
5   2      1    0
6   2      5   18
7   3      1    0
8   3      5    6