# xarray.core.groupby.DataArrayGroupBy.cumprod

#### DataArrayGroupBy.cumprod(dim=None, , skipna=None, keep_attrs=None, \*\*kwargs)[[source]](https://github.com/pydata/xarray/blob/main/xarray/core/_aggregations.py#L8177-L8276)

Reduce this DataArray’s data by applying `cumprod` (i.e., cumulative product) along some dimension(s).

* **Parameters:**
  * **dim** ([`str`](https://docs.python.org/3/builtins/stdtypes.html#str), `Iterable` of `Hashable`, `"..."` or [`None`](https://docs.python.org/3/builtins/constants.html#None), *default*: [`None`](https://docs.python.org/3/builtins/constants.html#None)) – Name of dimension[s] along which to apply `cumprod`. For e.g. `dim="x"`
    or `dim=["x", "y"]`. If None, will reduce over the GroupBy dimensions.
    If “…”, will reduce over all dimensions.
  * **skipna** ([`bool`](https://docs.python.org/3/builtins/functions.html#bool) or [`None`](https://docs.python.org/3/builtins/constants.html#None), *optional*) – If True, skip missing values (as marked by NaN). By default, only
    skips missing values for float dtypes; other dtypes either do not
    have a sentinel missing value (int) or `skipna=True` has not been
    implemented (object, datetime64 or timedelta64).
  * **keep_attrs** ([`bool`](https://docs.python.org/3/builtins/functions.html#bool) or [`None`](https://docs.python.org/3/builtins/constants.html#None), *optional*) – If True, `attrs` will be copied from the original
    object to the new one.  If False, the new object will be
    returned without attributes.
  * **\*\*kwargs** (`Any`) – Additional keyword arguments passed on to the appropriate array
    function for calculating `cumprod` on this object’s data.
    These could include dask-specific kwargs like `split_every`.
* **Returns:**
  **reduced** ([`DataArray`](xarray.DataArray.html.md#xarray.DataArray)) – New DataArray with `cumprod` applied to its data and the
  indicated dimension(s) removed

#### SEE ALSO
[`numpy.cumprod`](https://numpy.org/doc/stable/reference/generated/numpy.cumprod.html#numpy.cumprod), [`dask.array.cumprod`](https://docs.dask.org/en/latest/generated/dask.array.cumprod.html#dask.array.cumprod), `DataArray.cumprod`, `DataArray.cumulative`

[GroupBy: Group and Bin Data](../user-guide/groupby.html.md#groupby)
: User guide on groupby operations.

### Notes

Use the `flox` package to significantly speed up groupby computations,
especially with dask arrays. Xarray will use flox by default if installed.
Pass flox-specific keyword arguments in `**kwargs`.
See the [flox documentation](https://flox.readthedocs.io) for more.

Non-numeric variables will be removed prior to reducing. datetime64 and timedelta64 dtypes are treated as numeric for aggregation operations.

Note that the methods on the `cumulative` method are more performant (with numbagg installed)
and better supported. `cumsum` and `cumprod` may be deprecated
in the future.

### Examples

<div class="try_examples_button_container"><button class="try_examples_button" onclick="window.tryExamplesShowIframe('ee2b7674-f88e-4849-ae7f-b4c2014e5b26','c15ac6ee-e43b-462e-870d-9c4a1c634fbc','d4759128-ce6c-40bb-9049-49208af539dd','../lite/tree/../notebooks/index.html?path=af3e8c85_acca_4965_a421_b2a693a41b52.ipynb','None')">Try it in your browser!</button></div>
```pycon
>>> da = xr.DataArray(
...     np.array([1, 2, 3, 0, 2, np.nan]),
...     dims="time",
...     coords=dict(
...         time=("time", pd.date_range("2001-01-01", freq="ME", periods=6)),
...         labels=("time", np.array(["a", "b", "c", "c", "b", "a"])),
...     ),
... )
>>> da
<xarray.DataArray (time: 6)> Size: 48B
array([ 1.,  2.,  3.,  0.,  2., nan])
Coordinates:
  * time     (time) datetime64[us] 48B 2001-01-31 2001-02-28 ... 2001-06-30
    labels   (time) <U1 24B 'a' 'b' 'c' 'c' 'b' 'a'
```

```pycon
>>> da.groupby("labels").cumprod()
<xarray.DataArray (time: 6)> Size: 48B
array([1., 2., 3., 0., 4., 1.])
Coordinates:
  * time     (time) datetime64[us] 48B 2001-01-31 2001-02-28 ... 2001-06-30
    labels   (time) <U1 24B 'a' 'b' 'c' 'c' 'b' 'a'
```

Use `skipna` to control whether NaNs are ignored.

```pycon
>>> da.groupby("labels").cumprod(skipna=False)
<xarray.DataArray (time: 6)> Size: 48B
array([ 1.,  2.,  3.,  0.,  4., nan])
Coordinates:
  * time     (time) datetime64[us] 48B 2001-01-31 2001-02-28 ... 2001-06-30
    labels   (time) <U1 24B 'a' 'b' 'c' 'c' 'b' 'a'
```

<div id="d4759128-ce6c-40bb-9049-49208af539dd" class="try_examples_outer_iframe  hidden"><div class="try_examples_button_container"><button class="try_examples_button" onclick="window.tryExamplesHideIframe('ee2b7674-f88e-4849-ae7f-b4c2014e5b26','d4759128-ce6c-40bb-9049-49208af539dd')">Go Back</button><button class="try_examples_button" onclick="window.openInNewTab('ee2b7674-f88e-4849-ae7f-b4c2014e5b26','d4759128-ce6c-40bb-9049-49208af539dd')">Open In Tab</button></div><div id="c15ac6ee-e43b-462e-870d-9c4a1c634fbc" class="jupyterlite_sphinx_iframe_container"></div></div><script>document.addEventListener("DOMContentLoaded", function() {window.loadTryExamplesConfig("../try_examples.json");});</script>
