Overview:
- Python pandas library provide several functions through the dataframe methods for performing cumulative computations which include cummax(), cummin(), cumsum() and cumprod().
- The cummax() method of pandas dataframe looks for and maintains the maximum value encountered so far: either row wise(i.e., based on index) or column wise. When a new maximum is found it replaces the actual value with the new maximum.
- The cummin() method maintains the minimum value encountered so far. When a new minimum is found it replaces the actual value with the new minimum.
- The cumsum() method replaces the actual values of the dataframe along a given axis with the cumulative sum.
- The cumprod() method replaces the actual values of the dataframe along a given axis with the cumulative product.
- None values are considered as np.nan. The None values and np.nan values can be considered or ignored using the parameter skipna.
Example - Cumulative Maximum – axis=0, Ignore Nan:
import pandas as pd
matrixData = {"a":[10,50,30,30,40], "b":[60,None,100,90,80], "c":[95,85,75,65,55], "d":[5,25,45,35,15] }; print("Input Dataframe:"); dataFrame = pd.DataFrame(data=matrixData); maxval = dataFrame.cummax(axis=0); print(dataFrame) print("Dataframe returned by cummax:"); print(maxval) |
Output:
Dataframe: a b c d 0 10 60.0 95 5 1 50 NaN 85 25 2 30 100.0 75 45 3 30 90.0 65 35 4 40 80.0 55 15 Dataframe returned by cummax: a b c d 0 10.0 60.0 95.0 5.0 1 50.0 NaN 95.0 25.0 2 50.0 100.0 95.0 45.0 3 50.0 100.0 95.0 45.0 4 50.0 100.0 95.0 45.0
|
Example - Cumulative Maximum – axis =0, Consider Nan:
import pandas as pd
matrixData = {"w":[5,1,6,9,3], "x":[2,7,None,9,4], "y":[1,9,8,4,9], "z":[4,3,4,1,8] }; print("Dataframe:"); dataFrame = pd.DataFrame(data=matrixData); maxval = dataFrame.cummax(axis=0, skipna=False); print(dataFrame) print("Dataframe returned by cummax:"); print(maxval) |
Output:
Dataframe: w x y z 0 5 2.0 1 4 1 1 7.0 9 3 2 6 NaN 8 4 3 9 9.0 4 1 4 3 4.0 9 8 Dataframe returned by cummax: w x y z 0 5.0 2.0 1.0 4.0 1 5.0 7.0 9.0 4.0 2 6.0 NaN 9.0 4.0 3 9.0 NaN 9.0 4.0 4 9.0 NaN 9.0 8.0 |
Example - Cumulative Maximum – Axis = 1
import pandas as pd
matrixData = {"a":[101,27,157,41,165], "b":[79,46,None,28,37], "c":[56,21,96,73,9], "d":[67,57,128,96,44] }; print("Dataframe:"); dataFrame = pd.DataFrame(data=matrixData); maxval = dataFrame.cummax(axis=1); print(dataFrame) print("Dataframe returned by cummax:"); print(maxval) |
Output:
Dataframe: a b c d 0 101 79.0 56 67 1 27 46.0 21 57 2 157 NaN 96 128 3 41 28.0 73 96 4 165 37.0 9 44 Dataframe returned by cummax: a b c d 0 101.0 101.0 101.0 101.0 1 27.0 46.0 46.0 57.0 2 157.0 NaN 157.0 157.0 3 41.0 41.0 73.0 96.0 4 165.0 165.0 165.0 165.0 |
Example - Cumulative Minimum:
import pandas as pd
frameData = {"a":[78,82,79,89,83], "b":[89,81,86,82,79], "c":[80,73,86,77,12], "d":[90,92,None,88,77] }; print("Dataframe:"); dataFrame = pd.DataFrame(data=frameData); minval = dataFrame.cummin(axis=0); print(dataFrame) print("Dataframe returned by cummin:"); print(minval) |
Output:
Dataframe: a b c d 0 78 89 80 90.0 1 82 81 73 92.0 2 79 86 86 NaN 3 89 82 77 88.0 4 83 79 12 77.0 Dataframe returned by cummin: a b c d 0 78.0 89.0 80.0 90.0 1 78.0 81.0 73.0 90.0 2 78.0 81.0 73.0 NaN 3 78.0 81.0 73.0 88.0 4 78.0 79.0 12.0 77.0 |
Example - Cumulative Sum:
import pandas as pd
frameData = {"p1":[1.5,1.51,1.52,1.53,1.54], "p2":[2,2.1,2.1,2.3,2.5], "p3":[3,4,5,6,7], "p4":[7,7.2,None,7.3,7.4] }; print("Dataframe:"); dataFrame = pd.DataFrame(data=frameData); sumval = dataFrame.cumsum(axis=0); print(dataFrame) print("Dataframe returned by cumsum:"); print(sumval) |
Output:
Dataframe: p1 p2 p3 p4 0 1.50 2.0 3 7.0 1 1.51 2.1 4 7.2 2 1.52 2.1 5 NaN 3 1.53 2.3 6 7.3 4 1.54 2.5 7 7.4 Dataframe returned by cumsum: p1 p2 p3 p4 0 1.50 2.0 3.0 7.0 1 3.01 4.1 7.0 14.2 2 4.53 6.2 12.0 NaN 3 6.06 8.5 18.0 21.5 4 7.60 11.0 25.0 28.9 |
Example - Cumulative Product:
import pandas as pd
frameData = {"v1":[10,20,30,40,50], "v2":[60,70,80,90,50], "v3":[1,1,1,1,1], "v4":[0,200,-200,0,0] }; print("Dataframe:"); dataFrame = pd.DataFrame(data=frameData); productval = dataFrame.cumprod(axis=1); print(dataFrame) print("Dataframe returned by cumprod:"); print(productval) |
Output:
Dataframe: v1 v2 v3 v4 0 10 60 1 0 1 20 70 1 200 2 30 80 1 -200 3 40 90 1 0 4 50 50 1 0 Dataframe returned by cumprod: v1 v2 v3 v4 0 10 600 600 0 1 20 1400 1400 280000 2 30 2400 2400 -480000 3 40 3600 3600 0 4 50 2500 2500 0 |