Python 将groupby总和值指定给原始表中的最后一行
例如,我有一张桌子 A 我想要的是(最后一行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
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