diff --git a/cf_xarray/groupers.py b/cf_xarray/groupers.py index 8bc55ec3..8feac50f 100644 --- a/cf_xarray/groupers.py +++ b/cf_xarray/groupers.py @@ -2,11 +2,12 @@ import numpy as np import pandas as pd -from xarray.groupers import EncodedGroups, UniqueGrouper +from xarray import Variable +from xarray.groupers import EncodedGroups, Grouper, UniqueGrouper @dataclass -class FlagGrouper(UniqueGrouper): +class FlagGrouper(Grouper): """ Grouper object that allows convenient categorical grouping by a CF flag variable. @@ -23,12 +24,12 @@ def factorize(self, group) -> EncodedGroups: values = np.array(group.attrs["flag_values"]) full_index = pd.Index(group.attrs["flag_meanings"].split(" ")) - self.labels = values + grouper = UniqueGrouper(labels=values) # TODO: we could optimize here, since `group` is already factorized, # but there are subtleties. For example, the attrs must be up to date, # any value that is not in flag_values will cause an error, etc. - ret = super().factorize(group) + ret = grouper.factorize(group) ret.codes.attrs.pop("flag_values") ret.codes.attrs.pop("flag_meanings") @@ -36,5 +37,11 @@ def factorize(self, group) -> EncodedGroups: return EncodedGroups( codes=ret.codes, full_index=full_index, + unique_coord=Variable( + dims=ret.codes.name, data=np.array(full_index), attrs=ret.codes.attrs + ), group_indices=ret.group_indices, ) + + def reset(self): + raise NotImplementedError()