@@ -3000,7 +3000,6 @@ def _update_indexer(idxr, indexer=indexer):
3000
3000
return indexer
3001
3001
return indexer & idxr
3002
3002
3003
- need_sort = False
3004
3003
for i , k in enumerate (seq ):
3005
3004
3006
3005
if com .is_bool_indexer (k ):
@@ -3011,21 +3010,13 @@ def _update_indexer(idxr, indexer=indexer):
3011
3010
elif is_list_like (k ):
3012
3011
# a collection of labels to include from this level (these
3013
3012
# 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
-
3021
3013
indexers = None
3022
3014
for x in k :
3023
3015
try :
3024
3016
idxrs = _convert_to_indexer (
3025
3017
self ._get_level_indexer (x , level = i , indexer = indexer )
3026
3018
)
3027
3019
indexers = idxrs if indexers is None else indexers | idxrs
3028
-
3029
3020
except KeyError :
3030
3021
3031
3022
# ignore not founds
@@ -3063,8 +3054,7 @@ def _update_indexer(idxr, indexer=indexer):
3063
3054
if indexer is None :
3064
3055
return Int64Index ([])._ndarray_values
3065
3056
3066
- if need_sort :
3067
- indexer = self ._reorder_indexer (seq , indexer )
3057
+ indexer = self ._reorder_indexer (seq , indexer )
3068
3058
3069
3059
return indexer ._ndarray_values
3070
3060
@@ -3084,8 +3074,21 @@ def _reorder_indexer(
3084
3074
-------
3085
3075
indexer : a sorted Int64Index indexer of self ordered as seq
3086
3076
"""
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
+
3087
3090
n = len (self )
3088
- keys = tuple ()
3091
+ keys : Tuple [ np . ndarray , ...] = tuple ()
3089
3092
# For each level of the sequence in seq, map the level codes with the
3090
3093
# order they appears in a list-like sequence
3091
3094
# This mapping is then use to reorder the indexer
0 commit comments