datatable.cumprod()¶
For each column from cols calculate cumulative product. The product of
the missing values is calculated as one. In the presence of by(),
the cumulative product is computed within each group.
Parameters¶
FExprInput data for cumulative product calculation.
boolIf False, computation is done from top to bottom.
If True, it is done from bottom to top.
FExprf-expression that converts input columns into the columns filled with the respective cumulative products.
TypeErrorThe exception is raised when one of the columns from cols
has a non-numeric type.
Examples¶
Create a sample datatable frame:
from datatable import dt, f, by
DT = dt.Frame({"A": [2, None, 5, -1, 0],
"B": [None, None, None, None, None],
"C": [5.4, 3, 2.2, 4.323, 3],
"D": ['a', 'a', 'b', 'b', 'b']})
| A | B | C | D | ||
|---|---|---|---|---|---|
| int32 | void | float64 | str32 | ||
| 0 | 2 | NA | 5.4 | a | |
| 1 | NA | NA | 3 | a | |
| 2 | 5 | NA | 2.2 | b | |
| 3 | -1 | NA | 4.323 | b | |
| 4 | 0 | NA | 3 | b |
Calculate cumulative product in a single column:
DT[:, dt.cumprod(f.A)]
| A | ||
|---|---|---|
| int64 | ||
| 0 | 2 | |
| 1 | 2 | |
| 2 | 10 | |
| 3 | -10 | |
| 4 | 0 |
Calculate the cumulative product from bottom to top:
DT[:, dt.cumprod(f.A, reverse=True)]
| A | ||
|---|---|---|
| int64 | ||
| 0 | 0 | |
| 1 | 0 | |
| 2 | 0 | |
| 3 | 0 | |
| 4 | 0 |
Calculate cumulative products in multiple columns:
DT[:, dt.cumprod(f[:-1])]
| A | B | C | ||
|---|---|---|---|---|
| int64 | int64 | float64 | ||
| 0 | 2 | 1 | 5.4 | |
| 1 | 2 | 1 | 16.2 | |
| 2 | 10 | 1 | 35.64 | |
| 3 | -10 | 1 | 154.072 | |
| 4 | 0 | 1 | 462.215 |
For a grouped frame calculate cumulative products within each group:
DT[:, dt.cumprod(f[:]), by('D')]
| D | A | B | C | ||
|---|---|---|---|---|---|
| str32 | int64 | int64 | float64 | ||
| 0 | a | 2 | 1 | 5.4 | |
| 1 | a | 2 | 1 | 16.2 | |
| 2 | b | 5 | 1 | 2.2 | |
| 3 | b | -5 | 1 | 9.5106 | |
| 4 | b | 0 | 1 | 28.5318 |