html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue https://github.com/pydata/xarray/issues/3004#issuecomment-508995157,https://api.github.com/repos/pydata/xarray/issues/3004,508995157,MDEyOklzc3VlQ29tbWVudDUwODk5NTE1Nw==,21049064,2019-07-07T12:17:45Z,2019-07-07T12:17:45Z,NONE,Perfect thankyou!,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,453576041 https://github.com/pydata/xarray/issues/3004#issuecomment-500165601,https://api.github.com/repos/pydata/xarray/issues/3004,500165601,MDEyOklzc3VlQ29tbWVudDUwMDE2NTYwMQ==,21049064,2019-06-08T21:28:34Z,2019-06-08T21:28:34Z,NONE,"The best way I have found so far is: ``` df = rank_norm.to_dataframe() bins = pd.qcut(df['rank_norm'], 5, labels=[1, 2, 3, 4, 5]) output = bins.to_xarray().to_dataset().rename({'rank_norm':'rank_quantile'}) ``` Which returns: ``` Dimensions: (lat: 10, lon: 10, time: 70) Coordinates: * lat (lat) float64 -5.175 -5.125 -5.075 ... -4.825 -4.775 -4.725 * lon (lon) float64 33.52 33.57 33.62 33.67 ... 33.87 33.92 33.97 * time (time) datetime64[ns] 2010-02-28 2010-03-31 ... 2015-11-30 Data variables: rank_quantile (lat, lon, time) int64 2 1 1 1 2 2 1 1 1 ... 1 1 2 2 1 4 2 2 ```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,453576041 https://github.com/pydata/xarray/issues/3004#issuecomment-499959555,https://api.github.com/repos/pydata/xarray/issues/3004,499959555,MDEyOklzc3VlQ29tbWVudDQ5OTk1OTU1NQ==,21049064,2019-06-07T16:53:55Z,2019-06-08T21:11:46Z,NONE,"So if I want them separated into 5 percentiles `(0, 20) (20,40) (40,60) (60,80) (80,100)` ``` bins = [-0.01, 20., 40., 60., 80., np.Inf] bin_labels = ['1', '2', '3', '4, '5'] ```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,453576041 https://github.com/pydata/xarray/issues/3004#issuecomment-499961306,https://api.github.com/repos/pydata/xarray/issues/3004,499961306,MDEyOklzc3VlQ29tbWVudDQ5OTk2MTMwNg==,21049064,2019-06-07T16:59:12Z,2019-06-07T16:59:12Z,NONE,"Also how do I assign the result of the `xarray.core.groupby.DatasetGroupBy` and the `labels` to a new variable? ``` bin_labels = ['20', '40', '60', '80'] decile_index_gpby = rank_norm.groupby_bins('rank_norm', bins=bins, labels=bin_labels) decile_index_gpby.assign() # assign_coords() ``` Gives me the error message: ``` --------------------------------------------------------------------------- ValueError Traceback (most recent call last) in ----> 1 decile_index_gpby = rank_norm.groupby_bins('rank_norm', bins=bins, labels=bin_labels) 2 decile_index_gpby.assign() # assign_coords() ~/miniconda3/lib/python3.7/site-packages/xarray/core/common.py in groupby_bins(self, group, bins, right, labels, precision, include_lowest, squeeze) 529 cut_kwargs={'right': right, 'labels': labels, 530 'precision': precision, --> 531 'include_lowest': include_lowest}) 532 533 def rolling(self, dim=None, min_periods=None, center=False, **dim_kwargs): ~/miniconda3/lib/python3.7/site-packages/xarray/core/groupby.py in __init__(self, obj, group, squeeze, grouper, bins, cut_kwargs) 249 250 if bins is not None: --> 251 binned = pd.cut(group.values, bins, **cut_kwargs) 252 new_dim_name = group.name + '_bins' 253 group = DataArray(binned, group.coords, name=new_dim_name) ~/miniconda3/lib/python3.7/site-packages/pandas/core/reshape/tile.py in cut(x, bins, right, labels, retbins, precision, include_lowest, duplicates) 239 include_lowest=include_lowest, 240 dtype=dtype, --> 241 duplicates=duplicates) 242 243 return _postprocess_for_cut(fac, bins, retbins, x_is_series, ~/miniconda3/lib/python3.7/site-packages/pandas/core/reshape/tile.py in _bins_to_cuts(x, bins, right, labels, precision, include_lowest, dtype, duplicates) 357 else: 358 if len(labels) != len(bins) - 1: --> 359 raise ValueError('Bin labels must be one fewer than ' 360 'the number of bin edges') 361 if not is_categorical_dtype(labels): ValueError: Bin labels must be one fewer than the number of bin edges In [7]: bin_labels = ['20', '40', '60', '80'] ...: decile_index_gpby = rank_norm.groupby_bins('rank_norm', bins=bins, labels=bin_labels) ...: decile_index_gpby.assign() # assign_coords() ...: --------------------------------------------------------------------------- IndexError Traceback (most recent call last) in 1 bin_labels = ['20', '40', '60', '80'] 2 decile_index_gpby = rank_norm.groupby_bins('rank_norm', bins=bins, labels=bin_labels) ----> 3 decile_index_gpby.assign() # assign_coords() ~/miniconda3/lib/python3.7/site-packages/xarray/core/groupby.py in assign(self, **kwargs) 772 Dataset.assign 773 """""" --> 774 return self.apply(lambda ds: ds.assign(**kwargs)) 775 776 ~/miniconda3/lib/python3.7/site-packages/xarray/core/groupby.py in apply(self, func, args, **kwargs) 684 kwargs.pop('shortcut', None) # ignore shortcut if set (for now) 685 applied = (func(ds, *args, **kwargs) for ds in self._iter_grouped()) --> 686 return self._combine(applied) 687 688 def _combine(self, applied): ~/miniconda3/lib/python3.7/site-packages/xarray/core/groupby.py in _combine(self, applied) 691 coord, dim, positions = self._infer_concat_args(applied_example) 692 combined = concat(applied, dim) --> 693 combined = _maybe_reorder(combined, dim, positions) 694 if coord is not None: 695 combined[coord.name] = coord ~/miniconda3/lib/python3.7/site-packages/xarray/core/groupby.py in _maybe_reorder(xarray_obj, dim, positions) 468 469 def _maybe_reorder(xarray_obj, dim, positions): --> 470 order = _inverse_permutation_indices(positions) 471 472 if order is None: ~/miniconda3/lib/python3.7/site-packages/xarray/core/groupby.py in _inverse_permutation_indices(positions) 110 positions = [np.arange(sl.start, sl.stop, sl.step) for sl in positions] 111 --> 112 indices = nputils.inverse_permutation(np.concatenate(positions)) 113 return indices 114 ~/miniconda3/lib/python3.7/site-packages/xarray/core/nputils.py in inverse_permutation(indices) 58 # use intp instead of int64 because of windows :( 59 inverse_permutation = np.empty(len(indices), dtype=np.intp) ---> 60 inverse_permutation[indices] = np.arange(len(indices), dtype=np.intp) 61 return inverse_permutation 62 IndexError: index 1204 is out of bounds for axis 0 with size 1000 ```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,453576041 https://github.com/pydata/xarray/issues/3004#issuecomment-499958420,https://api.github.com/repos/pydata/xarray/issues/3004,499958420,MDEyOklzc3VlQ29tbWVudDQ5OTk1ODQyMA==,21049064,2019-06-07T16:50:36Z,2019-06-07T16:50:36Z,NONE,"Why does the number of bin labels have to be one less than the number of bins? ``` bin_labels = ['20', '40', '60', '80', '100'] decile_index_gpby = rank_norm.groupby_bins('rank_norm', bins=bins, labels=bin_labels) Out[]: ValueError: Bin labels must be one fewer than the number of bin edges ```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,453576041