Skip to content

ENH: points coord from isel/sel_points should be a MultiIndex #1493

Closed
@jhamman

Description

@jhamman

We implemented the pointwise indexing methods (isel_points and sel_points) before we had MultiIndex support. Would it make sense to update these methods to return objects with coordinates defined as a MultiIndex?

Current behavior:

print('original --> \n', ds)

lons = [-88, -85.9]
lats = [34.2, 31.9]

subset = ds.sel_points(lon=lons, lat=lats, method='nearest')
print('subset --> \n', subset)

yields:

original --> 
 <xarray.Dataset>
Dimensions:  (lat: 224, lon: 464, time: 19709)
Coordinates:
  * lat      (lat) float64 25.06 25.19 25.31 25.44 25.56 25.69 25.81 25.94 ...
  * lon      (lon) float64 -124.9 -124.8 -124.7 -124.6 -124.4 -124.3 -124.2 ...
  * time     (time) float64 5.548e+04 5.548e+04 5.548e+04 5.548e+04 ...
Data variables:
    pcp      (time, lat, lon) float64 nan nan nan nan nan nan nan nan nan ...
subset --> 
 <xarray.Dataset>
Dimensions:  (points: 2, time: 19709)
Coordinates:
    lat      (points) float64 34.19 31.94
    lon      (points) float64 -87.94 -85.94
  * time     (time) float64 5.548e+04 5.548e+04 5.548e+04 5.548e+04 ...
Dimensions without coordinates: points
Data variables:
    pcp      (points, time) float64 0.0 5.698 0.0 0.0 14.66 0.0 0.0 0.0 0.0 ...

Maybe it makes sense to return an object with a MultiIndex like:

new = pd.MultiIndex.from_arrays([subset.lon.to_index(),
                                subset.lat.to_index()],
                                names=['lon', 'lat'])
print(new)
MultiIndex(levels=[[-87.9375, -85.9375], [31.9375, 34.1875]],
           labels=[[0, 1], [1, 0]],
           names=['lon', 'lat'])

xref: #214, #475, #507

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions