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-508993107,https://api.github.com/repos/pydata/xarray/issues/3004,508993107,MDEyOklzc3VlQ29tbWVudDUwODk5MzEwNw==,6628425,2019-07-07T11:46:41Z,2019-07-07T11:46:41Z,MEMBER,I provided an answer to a question related to this on StackOverflow: https://stackoverflow.com/a/56514582/3825533.  @tommylees112 would it be OK if we closed this issue?,"{""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:
```
<xarray.Dataset>
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)
<ipython-input-6-0c8328bf2f77> in <module>
----> 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)
<ipython-input-7-a4ba78018478> in <module>
      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-499959013,https://api.github.com/repos/pydata/xarray/issues/3004,499959013,MDEyOklzc3VlQ29tbWVudDQ5OTk1OTAxMw==,2448579,2019-06-07T16:52:22Z,2019-06-07T16:52:22Z,MEMBER,"As the message says, you're specifying bin edges in `bins`, so you probably want `bin_labels=['30', '50', '70', '90']`","{""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
https://github.com/pydata/xarray/issues/3004#issuecomment-499952572,https://api.github.com/repos/pydata/xarray/issues/3004,499952572,MDEyOklzc3VlQ29tbWVudDQ5OTk1MjU3Mg==,1197350,2019-06-07T16:32:02Z,2019-06-07T16:32:02Z,MEMBER,"If you just want different coordinates for the result of `groupby_bins`, you can pass the `labels` keyword. See example here: http://xarray.pydata.org/en/stable/groupby.html#binning","{""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,453576041