@@ -892,7 +892,7 @@ def maybe_chunk(name, var, chunks):
892
892
for k , v in self .variables .items ()])
893
893
return self ._replace_vars_and_dims (variables )
894
894
895
- def isel (self , ** indexers ):
895
+ def isel (self , drop = False , ** indexers ):
896
896
"""Returns a new dataset with each array indexed along the specified
897
897
dimension(s).
898
898
@@ -902,6 +902,9 @@ def isel(self, **indexers):
902
902
903
903
Parameters
904
904
----------
905
+ drop : bool, optional
906
+ If ``drop=True``, drop coordinates variables indexed by integers
907
+ instead of making them scalar.
905
908
**indexers : {dim: indexer, ...}
906
909
Keyword arguments with names matching dimensions and values given
907
910
by integers, slice objects or arrays.
@@ -935,10 +938,13 @@ def isel(self, **indexers):
935
938
variables = OrderedDict ()
936
939
for name , var in iteritems (self ._variables ):
937
940
var_indexers = dict ((k , v ) for k , v in indexers if k in var .dims )
938
- variables [name ] = var .isel (** var_indexers )
939
- return self ._replace_vars_and_dims (variables )
941
+ new_var = var .isel (** var_indexers )
942
+ if not (drop and name in var_indexers ):
943
+ variables [name ] = new_var
944
+ coord_names = set (self ._coord_names ) & set (variables )
945
+ return self ._replace_vars_and_dims (variables , coord_names = coord_names )
940
946
941
- def sel (self , method = None , tolerance = None , ** indexers ):
947
+ def sel (self , method = None , tolerance = None , drop = False , ** indexers ):
942
948
"""Returns a new dataset with each array indexed by tick labels
943
949
along the specified dimension(s).
944
950
@@ -969,6 +975,9 @@ def sel(self, method=None, tolerance=None, **indexers):
969
975
matches. The values of the index at the matching locations most
970
976
satisfy the equation ``abs(index[indexer] - target) <= tolerance``.
971
977
Requires pandas>=0.17.
978
+ drop : bool, optional
979
+ If ``drop=True``, drop coordinates variables in `indexers` instead
980
+ of making them scalar.
972
981
**indexers : {dim: indexer, ...}
973
982
Keyword arguments with names matching dimensions and values given
974
983
by scalars, slices or arrays of tick labels. For dimensions with
@@ -994,7 +1003,8 @@ def sel(self, method=None, tolerance=None, **indexers):
994
1003
pos_indexers , new_indexes = indexing .remap_label_indexers (
995
1004
self , indexers , method = method , tolerance = tolerance
996
1005
)
997
- return self .isel (** pos_indexers )._replace_indexes (new_indexes )
1006
+ result = self .isel (drop = drop , ** pos_indexers )
1007
+ return result ._replace_indexes (new_indexes )
998
1008
999
1009
def isel_points (self , dim = 'points' , ** indexers ):
1000
1010
"""Returns a new dataset with each array indexed pointwise along the
0 commit comments