Pandas assign the groupby sum value to the last row in the original table

久未见 提交于 2020-04-13 06:47:23

问题


For example, I have a table

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

What I want is like (the last row of sum should be the sum of price of a group)

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

What I can do is find out the sum using

A['price'].groupby(A['id']).transform('sum')

However I don't know how to assign this to the sum column (last row).

Thanks


回答1:


Use last_valid_index to locate rows to fill

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



回答2:


You could do this:

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))

Output:

   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


来源:https://stackoverflow.com/questions/49018644/pandas-assign-the-groupby-sum-value-to-the-last-row-in-the-original-table

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!