@@ -4054,13 +4054,78 @@ def drop_sel(self, labels=None, *, errors="raise", **labels_kwargs):
4054
4054
labels_for_dim = [labels_for_dim ]
4055
4055
labels_for_dim = np .asarray (labels_for_dim )
4056
4056
try :
4057
- index = self .indexes [ dim ]
4057
+ index = self .get_index ( dim )
4058
4058
except KeyError :
4059
4059
raise ValueError ("dimension %r does not have coordinate labels" % dim )
4060
4060
new_index = index .drop (labels_for_dim , errors = errors )
4061
4061
ds = ds .loc [{dim : new_index }]
4062
4062
return ds
4063
4063
4064
+ def drop_isel (self , indexers = None , ** indexers_kwargs ):
4065
+ """Drop index positions from this Dataset.
4066
+
4067
+ Parameters
4068
+ ----------
4069
+ indexers : mapping of hashable to Any
4070
+ Index locations to drop
4071
+ **indexers_kwargs : {dim: position, ...}, optional
4072
+ The keyword arguments form of ``dim`` and ``positions``
4073
+
4074
+ Returns
4075
+ -------
4076
+ dropped : Dataset
4077
+
4078
+ Raises
4079
+ ------
4080
+ IndexError
4081
+
4082
+ Examples
4083
+ --------
4084
+ >>> data = np.arange(6).reshape(2, 3)
4085
+ >>> labels = ["a", "b", "c"]
4086
+ >>> ds = xr.Dataset({"A": (["x", "y"], data), "y": labels})
4087
+ >>> ds
4088
+ <xarray.Dataset>
4089
+ Dimensions: (x: 2, y: 3)
4090
+ Coordinates:
4091
+ * y (y) <U1 'a' 'b' 'c'
4092
+ Dimensions without coordinates: x
4093
+ Data variables:
4094
+ A (x, y) int64 0 1 2 3 4 5
4095
+ >>> ds.drop_isel(y=[0, 2])
4096
+ <xarray.Dataset>
4097
+ Dimensions: (x: 2, y: 1)
4098
+ Coordinates:
4099
+ * y (y) <U1 'b'
4100
+ Dimensions without coordinates: x
4101
+ Data variables:
4102
+ A (x, y) int64 1 4
4103
+ >>> ds.drop_isel(y=1)
4104
+ <xarray.Dataset>
4105
+ Dimensions: (x: 2, y: 2)
4106
+ Coordinates:
4107
+ * y (y) <U1 'a' 'c'
4108
+ Dimensions without coordinates: x
4109
+ Data variables:
4110
+ A (x, y) int64 0 2 3 5
4111
+ """
4112
+
4113
+ indexers = either_dict_or_kwargs (indexers , indexers_kwargs , "drop" )
4114
+
4115
+ ds = self
4116
+ dimension_index = {}
4117
+ for dim , pos_for_dim in indexers .items ():
4118
+ # Don't cast to set, as it would harm performance when labels
4119
+ # is a large numpy array
4120
+ if utils .is_scalar (pos_for_dim ):
4121
+ pos_for_dim = [pos_for_dim ]
4122
+ pos_for_dim = np .asarray (pos_for_dim )
4123
+ index = self .get_index (dim )
4124
+ new_index = index .delete (pos_for_dim )
4125
+ dimension_index [dim ] = new_index
4126
+ ds = ds .loc [dimension_index ]
4127
+ return ds
4128
+
4064
4129
def drop_dims (
4065
4130
self , drop_dims : Union [Hashable , Iterable [Hashable ]], * , errors : str = "raise"
4066
4131
) -> "Dataset" :
0 commit comments