@@ -72,8 +72,8 @@ class MultiIndex(Index):
7272 Examples
7373 ---------
7474 A new ``MultiIndex`` is typically constructed using one of the helper
75- methods :meth:`MultiIndex.from_arrays`` , :meth:`MultiIndex.from_product` `
76- and :meth:`MultiIndex.from_tuples`` . For example (using ``.from_arrays``):
75+ methods :meth:`MultiIndex.from_arrays`, :meth:`MultiIndex.from_product`
76+ and :meth:`MultiIndex.from_tuples`. For example (using ``.from_arrays``):
7777
7878 >>> arrays = [[1, 1, 2, 2], ['red', 'blue', 'red', 'blue']]
7979 >>> pd.MultiIndex.from_arrays(arrays, names=('number', 'color'))
@@ -1982,33 +1982,41 @@ def _partial_tup_index(self, tup, side='left'):
19821982
19831983 def get_loc (self , key , method = None ):
19841984 """
1985- Get integer location, slice or boolean mask for requested label or
1986- tuple. If the key is past the lexsort depth, the return may be a
1987- boolean mask array, otherwise it is always a slice or int.
1985+ Get location for a label or a tuple of labels as an integer, slice or
1986+ boolean mask.
19881987
19891988 Parameters
19901989 ----------
1991- key : label or tuple
1990+ key : label or tuple of labels (one for each level)
19921991 method : None
19931992
19941993 Returns
19951994 -------
19961995 loc : int, slice object or boolean mask
1996+ If the key is past the lexsort depth, the return may be a
1997+ boolean mask array, otherwise it is always a slice or int.
19971998
19981999 Examples
19992000 ---------
20002001 >>> mi = pd.MultiIndex.from_arrays([list('abb'), list('def')])
2002+
20012003 >>> mi.get_loc('b')
20022004 slice(1, 3, None)
2005+
20032006 >>> mi.get_loc(('b', 'e'))
20042007 1
20052008
2009+ Notes
2010+ ------
2011+ The key cannot be a slice, list of same-level labels, a boolean mask,
2012+ or a sequence of such. If you want to use those, use
2013+ :meth:`MultiIndex.get_locs` instead.
2014+
20062015 See also
20072016 --------
20082017 Index.get_loc : get_loc method for (single-level) index.
2009- get_locs : Given a tuple of slices/lists/labels/boolean indexer to a
2010- level-wise spec, produce an indexer to extract those
2011- locations.
2018+ MultiIndex.get_locs : Get location for a label/slice/list/mask or a
2019+ sequence of such.
20122020 """
20132021 if method is not None :
20142022 raise NotImplementedError ('only the default get_loc method is '
@@ -2117,8 +2125,9 @@ def get_loc_level(self, key, level=0, drop_level=True):
21172125
21182126 See Also
21192127 ---------
2120- MultiIndex.get_loc : Get integer location, slice or boolean mask for
2121- requested label or tuple.
2128+ MultiIndex.get_loc : Get location for a label or a tuple of labels.
2129+ MultiIndex.get_locs : Get location for a label/slice/list/mask or a
2130+ sequence of such
21222131 """
21232132
21242133 def maybe_droplevels (indexer , levels , drop_level ):
@@ -2328,23 +2337,41 @@ def convert_indexer(start, stop, step, indexer=indexer, labels=labels):
23282337 j = labels .searchsorted (loc , side = 'right' )
23292338 return slice (i , j )
23302339
2331- def get_locs (self , tup ):
2340+ def get_locs (self , seq ):
23322341 """
2333- Given a tuple of slices/lists/labels/boolean indexer to a level-wise
2334- spec produce an indexer to extract those locations
2342+ Get location for a given label/slice/list/mask or a sequence of such as
2343+ an array of integers.
23352344
23362345 Parameters
23372346 ----------
2338- key : tuple of (slices/list/labels)
2347+ seq : label/slice/list/mask or a sequence of such
2348+ You should use one of the above for each level.
2349+ If a level should not be used, set it to ``slice(None)``.
23392350
23402351 Returns
23412352 -------
2342- locs : integer list of locations or boolean indexer suitable
2343- for passing to iloc
2353+ locs : array of integers suitable for passing to iloc
2354+
2355+ Examples
2356+ ---------
2357+ >>> mi = pd.MultiIndex.from_arrays([list('abb'), list('def')])
2358+
2359+ >>> mi.get_locs('b')
2360+ array([1, 2], dtype=int64)
2361+
2362+ >>> mi.get_locs([slice(None), ['e', 'f']])
2363+ array([1, 2], dtype=int64)
2364+
2365+ >>> mi.get_locs([[True, False, True], slice('e', 'f')])
2366+ array([2], dtype=int64)
2367+
2368+ See also
2369+ --------
2370+ MultiIndex.get_loc : Get location for a label or a tuple of labels.
23442371 """
23452372
23462373 # must be lexsorted to at least as many levels
2347- true_slices = [i for (i , s ) in enumerate (is_true_slices (tup )) if s ]
2374+ true_slices = [i for (i , s ) in enumerate (is_true_slices (seq )) if s ]
23482375 if true_slices and true_slices [- 1 ] >= self .lexsort_depth :
23492376 raise UnsortedIndexError ('MultiIndex slicing requires the index '
23502377 'to be lexsorted: slicing on levels {0}, '
@@ -2377,7 +2404,7 @@ def _update_indexer(idxr, indexer=indexer):
23772404 return indexer
23782405 return indexer & idxr
23792406
2380- for i , k in enumerate (tup ):
2407+ for i , k in enumerate (seq ):
23812408
23822409 if is_bool_indexer (k ):
23832410 # a boolean indexer, must be the same length!
0 commit comments