Skip to content

Commit 9340916

Browse files
committed
CLN: Move need_sort test in _reorder_indexer
1 parent f692c4d commit 9340916

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

pandas/core/indexes/multi.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3000,7 +3000,6 @@ def _update_indexer(idxr, indexer=indexer):
30003000
return indexer
30013001
return indexer & idxr
30023002

3003-
need_sort = False
30043003
for i, k in enumerate(seq):
30053004

30063005
if com.is_bool_indexer(k):
@@ -3011,21 +3010,13 @@ def _update_indexer(idxr, indexer=indexer):
30113010
elif is_list_like(k):
30123011
# a collection of labels to include from this level (these
30133012
# are or'd)
3014-
# Find out if the list_like label are sorted as the levels or not
3015-
if not need_sort:
3016-
k_codes = self.levels[i].get_indexer(k)
3017-
k_codes = k_codes[k_codes >= 0] # Filter absent keys
3018-
# True if the given codes are not ordered
3019-
need_sort = (k_codes[:-1] > k_codes[1:]).any()
3020-
30213013
indexers = None
30223014
for x in k:
30233015
try:
30243016
idxrs = _convert_to_indexer(
30253017
self._get_level_indexer(x, level=i, indexer=indexer)
30263018
)
30273019
indexers = idxrs if indexers is None else indexers | idxrs
3028-
30293020
except KeyError:
30303021

30313022
# ignore not founds
@@ -3063,8 +3054,7 @@ def _update_indexer(idxr, indexer=indexer):
30633054
if indexer is None:
30643055
return Int64Index([])._ndarray_values
30653056

3066-
if need_sort:
3067-
indexer = self._reorder_indexer(seq, indexer)
3057+
indexer = self._reorder_indexer(seq, indexer)
30683058

30693059
return indexer._ndarray_values
30703060

@@ -3084,8 +3074,21 @@ def _reorder_indexer(
30843074
-------
30853075
indexer : a sorted Int64Index indexer of self ordered as seq
30863076
"""
3077+
# Find out if the list_like label are sorted as the levels or not
3078+
need_sort = False
3079+
for i, k in enumerate(seq):
3080+
if is_list_like(k):
3081+
if not need_sort:
3082+
k_codes = self.levels[i].get_indexer(k)
3083+
k_codes = k_codes[k_codes >= 0] # Filter absent keys
3084+
# True if the given codes are not ordered
3085+
need_sort = (k_codes[:-1] > k_codes[1:]).any()
3086+
# Bail out if no need to sort
3087+
if not need_sort:
3088+
return indexer
3089+
30873090
n = len(self)
3088-
keys = tuple()
3091+
keys: Tuple[np.ndarray, ...] = tuple()
30893092
# For each level of the sequence in seq, map the level codes with the
30903093
# order they appears in a list-like sequence
30913094
# This mapping is then use to reorder the indexer

0 commit comments

Comments
 (0)