id,node_id,number,title,user,state,locked,assignee,milestone,comments,created_at,updated_at,closed_at,author_association,active_lock_reason,draft,pull_request,body,reactions,performed_via_github_app,state_reason,repo,type 446868198,MDU6SXNzdWU0NDY4NjgxOTg=,2978,sel(method=x) is not propagated for MultiIndex,5308236,open,0,,,3,2019-05-21T23:30:56Z,2022-04-09T02:09:00Z,,NONE,,,,"When passing a `method` different from `None` to the selection method (e.g. `.sel(method='nearest')`), it is not propagated if the index is a MultiIndex. Specifically, the passing of the `method` key seems to be missing in `xarray/core/indexing.py:convert_label_indexer` https://github.com/pydata/xarray/blob/0811141e8f985a1f3b95ead92c3850cc74e160a5/xarray/core/indexing.py#L158-L159 For a normal index, the `method` is passed properly: https://github.com/pydata/xarray/blob/0811141e8f985a1f3b95ead92c3850cc74e160a5/xarray/core/indexing.py#L181 This leads to an unexpected `KeyError` when the selection value is not in the index, even if a nearest value could have been found. #### Output of ``xr.show_versions()``
INSTALLED VERSIONS ------------------ commit: None python: 3.6.7.final.0 python-bits: 64 OS: Linux OS-release: 4.4.0-143-generic machine: x86_64 processor: x86_64 byteorder: little LC_ALL: None LANG: en_US.UTF-8 LOCALE: en_US.UTF-8 xarray: 0.10.8 pandas: 0.24.2 numpy: 1.16.2 scipy: 1.1.0 netCDF4: 1.4.2 h5netcdf: None h5py: 2.8.0 Nio: None zarr: None bottleneck: None cyordereddict: None dask: 0.20.0 distributed: None matplotlib: 3.0.1 cartopy: None seaborn: 0.9.0 setuptools: 40.8.0 pip: 19.0.3 conda: None pytest: 3.10.0 IPython: 7.1.1 sphinx: None
","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/2978/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,,13221727,issue 376953925,MDU6SXNzdWUzNzY5NTM5MjU=,2537,single coordinate is overwritten with dimension by set_index,5308236,open,0,,,8,2018-11-02T20:17:54Z,2020-11-02T17:24:35Z,,NONE,,,,"#### Code Sample ```python import xarray as xr d = xr.DataArray([0], coords={'coord': ('dim', [0])}, dims=['dim']) d.set_index(append=True, inplace=True, dim=['coord']) d.sel(dim=0) # works d.sel(coord=0) # doesn't work, coord does not exist anymore print(d) ``` ``` array([0]) Coordinates: * dim (dim) int64 0 ``` #### Problem description when a DataArray is initialized with a dimension containing only one coordinate, selection on the coordinate is not directly possible. As a workaround, we can `set_index` but if there is only one coordinate on a dimension, the coordinate vanishes and its values are attached to the dimension directly. The DataArrays in my use case are generic, in some cases there are multiple coordinates and sometimes there is only one. If the one consistent coordinate is discarded for some cases, follow-up code becomes tedious. Having a single-coordinate MultiIndex would be much more intuitive so that one can still `.sel` over the coordinate. #### Expected Output ``` array([0]) Coordinates: * dim MultiIndex coord (dim) int64 0 ``` For more than one coordinate on the dimension, the dimension becomes a MultiIndex with all the coordinates. With only a single coordinate however, this does not happen. #### Output of ``xr.show_versions()``
INSTALLED VERSIONS ------------------ commit: None python: 3.6.6.final.0 python-bits: 64 OS: Linux OS-release: 4.4.0-137-generic machine: x86_64 processor: x86_64 byteorder: little LC_ALL: None LANG: en_US.UTF-8 LOCALE: en_US.UTF-8 xarray: 0.10.8 pandas: 0.23.4 numpy: 1.15.1 scipy: 1.1.0 netCDF4: 1.4.1 h5netcdf: None h5py: 2.8.0 Nio: None zarr: None bottleneck: None cyordereddict: None dask: 0.19.1 distributed: None matplotlib: 2.2.3 cartopy: None seaborn: 0.9.0 setuptools: 39.1.0 pip: 10.0.1 conda: None pytest: 3.8.0 IPython: 6.5.0 sphinx: None
","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/2537/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,,13221727,issue 365678022,MDU6SXNzdWUzNjU2NzgwMjI=,2452,DataArray.sel extremely slow,5308236,closed,0,,,5,2018-10-01T23:09:47Z,2018-10-02T16:15:00Z,2018-10-02T15:58:21Z,NONE,,,,"#### Problem description `.sel` is an xarray method I use a lot and I would have expected it to fairly efficient. However, even on tiny DataArrays, it takes seconds. #### Code Sample, a copy-pastable example if possible ```python import timeit setup = """""" import itertools import numpy as np import xarray as xr import string a = list(string.printable) b = list(string.ascii_lowercase) d = xr.DataArray(np.random.rand(len(a), len(b)), coords={'a': a, 'b': b}, dims=['a', 'b']) d.load() """""" run = """""" for _a, _b in itertools.product(a, b): d.sel(a=_a, b=_b) """""" running_times = timeit.repeat(run, setup, repeat=3, number=10) print(""xarray"", running_times) # e.g. [14.792144000064582, 15.19372400001157, 15.345327000017278] ``` #### Expected Output I would have expected the above code to run in milliseconds. However, it takes over 10 seconds! Adding an additional `d = d.stack(aa=['a'], bb=['b'])` makes it even slower, about twice as slow. For reference, a naive dict-indexing implementation in Python takes 0.01 seconds: ```python setup = """""" import itertools import numpy as np import string a = list(string.printable) b = list(string.ascii_lowercase) d = np.random.rand(len(a), len(b)) indexers = {'a': {coord: index for (index, coord) in enumerate(a)}, 'b': {coord: index for (index, coord) in enumerate(b)}} """""" run = """""" for _a, _b in itertools.product(a, b): index_a, index_b = indexers['a'][_a], indexers['b'][_b] item = d[index_a][index_b] """""" running_times = timeit.repeat(run, setup, repeat=3, number=10) print(""dicts"", running_times) # e.g. [0.015355999930761755, 0.01466800004709512, 0.014295000000856817] ``` #### Output of ``xr.show_versions()``
INSTALLED VERSIONS ------------------ commit: None python: 3.7.0.final.0 python-bits: 64 OS: Linux OS-release: 4.4.0-17134-Microsoft machine: x86_64 processor: x86_64 byteorder: little LC_ALL: None LANG: None LOCALE: en_US.UTF-8 xarray: 0.10.8 pandas: 0.23.4 numpy: 1.15.1 scipy: 1.1.0 netCDF4: 1.4.1 h5netcdf: None h5py: None Nio: None zarr: None bottleneck: None cyordereddict: None dask: None distributed: None matplotlib: 2.2.3 cartopy: None seaborn: None setuptools: 40.2.0 pip: 10.0.1 conda: None pytest: 3.7.4 IPython: 6.5.0 sphinx: None
this is a follow-up from #2438 ","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/2452/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,completed,13221727,issue 363629186,MDU6SXNzdWUzNjM2MjkxODY=,2438,Efficient workaround to group by multiple dimensions,5308236,closed,0,,,3,2018-09-25T15:11:38Z,2018-10-02T15:56:53Z,2018-10-02T15:56:53Z,NONE,,,,"Grouping by multiple dimensions is not yet supported (#324): ```python d = DataAssembly([[1, 2, 3], [4, 5, 6]], coords={'a': ('multi_dim', ['a', 'b']), 'c': ('multi_dim', ['c', 'c']), 'b': ['x', 'y', 'z']}, dims=['multi_dim', 'b']) d.groupby(['a', 'b']) # TypeError: `group` must be an xarray.DataArray or the name of an xarray variable or dimension ``` An inefficient solution is to run the for loops manually: ```python a, b = np.unique(d['a'].values), np.unique(d['b'].values) result = xr.DataArray(np.zeros([len(a), len(b)]), coords={'a': a, 'b': b}, dims=['a', 'b']) for a, b in itertools.product(a, b): cells = d.sel(a=a, b=b) merge = cells.mean() result.loc[{'a': a, 'b': b}] = merge # result = DataArray (a: 2, b: 2)> array([[2., 3.], [5., 6.]]) # Coordinates: # * a (a) INSTALLED VERSIONS ------------------ commit: None python: 3.7.0.final.0 python-bits: 64 OS: Linux OS-release: 4.4.0-17134-Microsoft machine: x86_64 processor: x86_64 byteorder: little LC_ALL: None LANG: None LOCALE: en_US.UTF-8 xarray: 0.10.8 pandas: 0.23.4 numpy: 1.15.1 scipy: 1.1.0 netCDF4: 1.4.1 h5netcdf: None h5py: None Nio: None zarr: None bottleneck: None cyordereddict: None dask: None distributed: None matplotlib: 2.2.3 cartopy: None seaborn: None setuptools: 40.2.0 pip: 10.0.1 conda: None pytest: 3.7.4 IPython: 6.5.0 sphinx: None Related: #324, https://stackoverflow.com/questions/52453426/grouping-by-multiple-dimensions","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/2438/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,completed,13221727,issue 319085244,MDU6SXNzdWUzMTkwODUyNDQ=,2095,combine complementary DataArrays,5308236,closed,0,,,1,2018-05-01T01:02:26Z,2018-05-02T01:34:53Z,2018-05-02T01:34:52Z,NONE,,,,"I have a list of DataArrays with three dimensions. For each item in the list, two of the dimensions are a single value but the combination of all items would yield the full combinatorial values. #### Code Sample ```python import itertools import numpy as np import xarray as xr ds = [] for vals_dim1, vals_dim2 in itertools.product(list(range(2)), list(range(3))): d = xr.DataArray(np.random.rand(1, 1, 4), coords={'dim1': [vals_dim1], 'dim2': [vals_dim2], 'dim3': range(4)}, dims=['dim1', 'dim2', 'dim3']) ds.append(d) ``` #### Expected Output I then want to combine these complimentary `DataArray`s but none of what I tried so far seems to work. The result should be a `DataArray` with shape `|2x3x4|` and dimensions `dim1: |2|, dim2: |3|, dim3: |4|`. The following do not work: ```python # does not automatically infer dimensions and fails with # ""ValueError: conflicting sizes for dimension 'concat_dim': length 2 on 'concat_dim' and length 6 on "" ds = xr.concat(ds, dim=['dim1', 'dim2']) # will still try to insert a new `concat_dim` and fails with # ""ValueError: conflicting MultiIndex level name(s): 'dim1' (concat_dim), (dim1) 'dim2' (concat_dim), (dim2)"" import pandas as pd dims = [[0] * 3 + [1] * 3, list(range(3)) * 2] dims = pd.MultiIndex.from_arrays(dims, names=['dim1', 'dim2']) ds = xr.concat(ds, dim=dims) # fails with # AttributeError: 'DataArray' object has no attribute 'data_vars' ds = xr.auto_combine(ds) ``` #### Output of ``xr.show_versions()``
INSTALLED VERSIONS ------------------ commit: None python: 3.6.4.final.0 python-bits: 64 OS: Linux OS-release: 4.4.0-43-Microsoft machine: x86_64 processor: x86_64 byteorder: little LC_ALL: None LANG: None LOCALE: None.None xarray: 0.10.2 pandas: 0.22.0 numpy: 1.14.2 scipy: 1.0.0 netCDF4: 1.3.1 h5netcdf: None h5py: None Nio: None zarr: None bottleneck: None cyordereddict: None dask: None distributed: None matplotlib: None cartopy: None seaborn: None setuptools: 38.5.1 pip: 10.0.1 conda: None pytest: 3.4.2 IPython: 6.2.1 sphinx: None
","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/2095/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,completed,13221727,issue