Add a column in pandas based on sum of the subgroup values in another column


Here is a simplified version of my dataframe (the number of persons in my dataframe is way more than 3):

df = pd.DataFrame({'Person':['John','David','Mary','John','David','Mary'],

The original df

I would like to add a column "Total" to this data frame, which is the sum of total sales per person
The desired df

What is the easiest way to achieve this?

I have tried


but the shape of the output is not congruent with the shape of df.

What I have tried

>Solution :

What you want is the transform method which can apply a function on each group:

df['Total'] = df.groupby('Person')['Sales'].transform(sum)

It gives as expected:

  Person  Sales  Total
0   John     10     21
1  David     15     27
2   Mary     20     38
3   John     11     21
4  David     12     27
5   Mary     18     38

Leave a Reply Cancel reply