how to calculate Cumulative Sum by Group in Pandas

In Pandas, cumulative sum by group can be calculated by using the groupby() and cumsum() functions. The groupby() function is used to group the dataframe by a specific column and the cumsum() function is then used to calculate the cumulative sum of the grouped values. The result of the cumulative sum calculation will be a new column in the dataframe containing the cumulative sum values.


You can use the following syntax to calculate a cumulative sum by group in pandas:

df['cumsum_col'] = df.groupby(['col1'])['col2'].cumsum()

This particular formula calculates the cumulative sum of col2, grouped by col1, and displays the results in a new column titled cumsum_col.

The following example shows how to use this syntax in practice.

Example: Calculate Cumulative Sum by Group in Pandas

Suppose we have the following pandas DataFrame that contains information about sales for various stores:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'store': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'],
                   'sales': [4, 7, 10, 5, 8, 9, 12, 15, 10, 8]})

#view DataFrame
print(df)

  store  sales
0     A      4
1     A      7
2     A     10
3     A      5
4     A      8
5     B      9
6     B     12
7     B     15
8     B     10
9     B      8

We can use the following syntax to calculate the cumulative sum of sales for each store:

#add column that shows cumulative sum of sales by store
df['cumsum_sales'] = df.groupby(['store'])['sales'].cumsum()

#view updated DataFrame
print(df)

  store  sales  cumsum_sales
0     A      4             4
1     A      7            11
2     A     10            21
3     A      5            26
4     A      8            34
5     B      9             9
6     B     12            21
7     B     15            36
8     B     10            46
9     B      8            54

The cumsum_sales column shows the cumulative sales, grouped by each store.

Note: You can find the complete documentation for the cumsum function in pandas .

x