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/1635#issuecomment-1463138999,https://api.github.com/repos/pydata/xarray/issues/1635,1463138999,IC_kwDOAMm_X85XNbq3,79179784,2023-03-10T02:31:27Z,2023-03-10T02:31:27Z,NONE,"I agree that at least the index should show the reflect the order of the ranking found using argsort.
```python
import xarray as xr
import numpy as np
np.random.rand(10)
ds = xr.DataArray(np.random.rand(10) )
ds.argsort().dim_0
```
returns
```array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])```
however it should return an array with the order of the elements ranked using argsort
e.g.
```array([3, 8, 5, 1, 7, 2, 9, 4, 6, 0])```
Where ds[3] is the smallest value in ds and ds[0] is the biggest etc.
The current behaviour is confusing / nonsenical. Return the index unchanged implies that the initial array is already ordered.
```
INSTALLED VERSIONS
------------------
commit: None
python: 3.10.9 | packaged by conda-forge | (main, Feb 2 2023, 20:20:04) [GCC 11.3.0]
python-bits: 64
OS: Linux
OS-release: 4.18.0-425.3.1.el8.nci.x86_64
machine: x86_64
processor: x86_64
byteorder: little
LC_ALL: None
LANG: None
LOCALE: ('en_US', 'UTF-8')
libhdf5: 1.12.2
libnetcdf: 4.8.1
xarray: 2023.2.0
pandas: 1.5.3
numpy: 1.23.5
scipy: 1.9.3
netCDF4: 1.6.0
pydap: None
h5netcdf: None
h5py: None
Nio: None
zarr: None
cftime: 1.6.2
nc_time_axis: None
PseudoNetCDF: None
rasterio: 1.3.4
cfgrib: None
iris: 3.3.1
bottleneck: None
dask: 2022.11.0
distributed: 2022.11.0
matplotlib: 3.4.3
cartopy: 0.21.1
seaborn: None
numbagg: None
fsspec: 2022.11.0
cupy: None
pint: None
sparse: 0.13.0
flox: None
numpy_groupies: None
setuptools: 65.5.1
pip: 23.0.1
conda: None
pytest: None
mypy: None
IPython: 8.6.0
sphinx: None
```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,266133430
https://github.com/pydata/xarray/issues/1635#issuecomment-545261919,https://api.github.com/repos/pydata/xarray/issues/1635,545261919,MDEyOklzc3VlQ29tbWVudDU0NTI2MTkxOQ==,7441788,2019-10-23T04:35:37Z,2019-10-23T04:35:37Z,CONTRIBUTOR,I think this issue is still relevant.,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,266133430
https://github.com/pydata/xarray/issues/1635#issuecomment-544830794,https://api.github.com/repos/pydata/xarray/issues/1635,544830794,MDEyOklzc3VlQ29tbWVudDU0NDgzMDc5NA==,26384082,2019-10-22T06:58:59Z,2019-10-22T06:58:59Z,NONE,"In order to maintain a list of currently relevant issues, we mark issues as stale after a period of inactivity
If this issue remains relevant, please comment here or remove the `stale` label; otherwise it will be marked as closed automatically
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,266133430
https://github.com/pydata/xarray/issues/1635#issuecomment-337672616,https://api.github.com/repos/pydata/xarray/issues/1635,337672616,MDEyOklzc3VlQ29tbWVudDMzNzY3MjYxNg==,7441788,2017-10-18T17:48:28Z,2017-10-18T18:36:25Z,CONTRIBUTOR,"I'm not a fan of auto-flattening either, but that's what `nd.argsort()` does...
One option is to have `DataArray.arg{min,max,sort}()` all take an optional flag argument specifying whether to return integer indices or index labels. But I think my preference would be be to have six separate functions: `DataArray.{idx,}arg{min,max,sort}()` (or some such nomenclature that includes `arg` in all six functions).","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,266133430
https://github.com/pydata/xarray/issues/1635#issuecomment-337631240,https://api.github.com/repos/pydata/xarray/issues/1635,337631240,MDEyOklzc3VlQ29tbWVudDMzNzYzMTI0MA==,1217238,2017-10-18T15:31:56Z,2017-10-18T15:31:56Z,MEMBER,"> Note that ndarray.argsort(axis=None) sorts the flattened array, so the returned DataArray should respect this
I'm not a huge fan of auto-flattening for xarray, but I can see this logic.
> Alternative suggestion: have DataArray.argsort() return an ndarray filled with labels from the sorted dimension
I would probably implement a new method for this, maybe `idxsort` for symmetry with `idxmax` (https://github.com/pydata/xarray/issues/60). Though that name could be read several different ways. Maybe `sortby_labels()`?","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,266133430
https://github.com/pydata/xarray/issues/1635#issuecomment-337623613,https://api.github.com/repos/pydata/xarray/issues/1635,337623613,MDEyOklzc3VlQ29tbWVudDMzNzYyMzYxMw==,7441788,2017-10-18T15:08:57Z,2017-10-18T15:08:57Z,CONTRIBUTOR,"I think that makes sense, though I don't quite understand what would go in its place. Another possibility -- perhaps a bad one -- is to permute the values in the sorted dimension so that they match the resulting values (i.e. something like `result.coords[dim] = np.take(da.coords[dim].values, result.values, axis=axis)`).
Note that `ndarray.argsort(axis=None)` sorts the flattened array, so the returned `DataArray` should respect this
Alternative suggestion: have `DataArray.argsort()` return an `ndarray` filled with labels from the sorted dimension, i.e. something like:
```
class DataArray:
def argsort(self, **kwargs):
# TODO: update kwargs['axis'] based 'axis' and 'dim', and remove 'dim'
if kwargs['axis'] is None:
kwargs['axis'] = -1
return self.stack(dim=self.dims).argsort(**kwargs)
return np.take(self.coords[self.dims[kwargs['axis']].values, self.values.argsort(**kwargs))
```
BTW, I'm just thinking in terms of `ndarray`s. Someone more knowledgeable than me may want to consider how to make it work intelligently with dask.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,266133430
https://github.com/pydata/xarray/issues/1635#issuecomment-337387398,https://api.github.com/repos/pydata/xarray/issues/1635,337387398,MDEyOklzc3VlQ29tbWVudDMzNzM4NzM5OA==,1217238,2017-10-17T22:04:26Z,2017-10-17T22:19:51Z,MEMBER,"It seems like another reasonable choice would be for `DataArray.argsort()` to keep its current value but drop coordinate labels along the sorting dimension. This would give a consistent result for use with broadcasting indexing (https://github.com/pydata/xarray/pull/1473).
I *think* this internal utility function is equivalent to your second argsort:
https://github.com/pydata/xarray/blob/2949558b75a65404a500a237ec54834fd6946d07/xarray/core/nputils.py#L38-L55
In practice, we might use `bottleneck.rankdata()` or `nanrankdata()`:
https://kwgoodman.github.io/bottleneck-doc/reference.html#non-reduce-with-axis","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,266133430