Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python - Pandas - Unroll / Remove Cumulative Sum

I have a data frame like the following (specific data below, this is generic). The no gives me a cumulative sum:

                 no
name day           
Jack Monday      10
     Tuesday     40
     Wednesday   90
Jill Monday      40
     Wednesday  150

I want to "unroll" the cumulative sum to give me something like this:

print df
   name        day   no
0  Jack     Monday   10
1  Jack    Tuesday   30
2  Jack  Wednesday   50
3  Jill     Monday   40
4  Jill  Wednesday  110

In essence, I'd like to do something like the following, but in reverse: Pandas groupby cumulative sum

like image 481
Afflatus Avatar asked Apr 06 '16 13:04

Afflatus


1 Answers

If I understand correctly you can do the following:

In [103]:
df.groupby(level=0).diff().fillna(df).reset_index()

Out[103]:
   name        day     no
0  Jack     Monday   10.0
1  Jack    Tuesday   30.0
2  Jack  Wednesday   50.0
3  Jill     Monday   40.0
4  Jill  Wednesday  110.0

So groupby the first index level and call diff to calculate the inter row differences per group and fill the NaN values with the original df values and call reset_index

like image 103
EdChum Avatar answered Sep 30 '22 21:09

EdChum