Pandas将groupby sum值分配给原始表中的最后一行

时间:2018-02-27 22:00:01

标签: python pandas indexing group-by sum

例如,我有一张表

A

id  price sum
1     2    0
1     6    0
1     4    0
2     2    0
2     10   0
2     1    0
2     5    0
3     1    0
3     5    0

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

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

我能做的是使用

找出总和
A['price'].groupby(A['id']).transform('sum')

但我不知道如何将其分配到sum列(最后一行)。

由于

2 个答案:

答案 0 :(得分:4)

使用last_valid_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

答案 1 :(得分:2)

你可以这样做:

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

OR

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