@@ -663,9 +663,9 @@ def get_loc(
663
663
)
664
664
)
665
665
@Appender (_index_shared_docs ["get_indexer" ])
666
- def get_indexer (
666
+ def _get_indexer (
667
667
self ,
668
- target : AnyArrayLike ,
668
+ target : Index ,
669
669
method : Optional [str ] = None ,
670
670
limit : Optional [int ] = None ,
671
671
tolerance : Optional [Any ] = None ,
@@ -679,35 +679,33 @@ def get_indexer(
679
679
"use IntervalIndex.get_indexer_non_unique"
680
680
)
681
681
682
- target_as_index = ensure_index (target )
683
-
684
- if isinstance (target_as_index , IntervalIndex ):
682
+ if isinstance (target , IntervalIndex ):
685
683
# equal indexes -> 1:1 positional match
686
- if self .equals (target_as_index ):
684
+ if self .equals (target ):
687
685
return np .arange (len (self ), dtype = "intp" )
688
686
689
- if self ._is_non_comparable_own_type (target_as_index ):
687
+ if self ._is_non_comparable_own_type (target ):
690
688
# different closed or incompatible subtype -> no matches
691
- return np .repeat (np .intp (- 1 ), len (target_as_index ))
689
+ return np .repeat (np .intp (- 1 ), len (target ))
692
690
693
- # non-overlapping -> at most one match per interval in target_as_index
691
+ # non-overlapping -> at most one match per interval in target
694
692
# want exact matches -> need both left/right to match, so defer to
695
693
# left/right get_indexer, compare elementwise, equality -> match
696
- left_indexer = self .left .get_indexer (target_as_index .left )
697
- right_indexer = self .right .get_indexer (target_as_index .right )
694
+ left_indexer = self .left .get_indexer (target .left )
695
+ right_indexer = self .right .get_indexer (target .right )
698
696
indexer = np .where (left_indexer == right_indexer , left_indexer , - 1 )
699
- elif is_categorical_dtype (target_as_index .dtype ):
700
- target_as_index = cast ("CategoricalIndex" , target_as_index )
697
+ elif is_categorical_dtype (target .dtype ):
698
+ target = cast ("CategoricalIndex" , target )
701
699
# get an indexer for unique categories then propagate to codes via take_1d
702
- categories_indexer = self .get_indexer (target_as_index .categories )
703
- indexer = take_1d (categories_indexer , target_as_index .codes , fill_value = - 1 )
704
- elif not is_object_dtype (target_as_index ):
700
+ categories_indexer = self .get_indexer (target .categories )
701
+ indexer = take_1d (categories_indexer , target .codes , fill_value = - 1 )
702
+ elif not is_object_dtype (target ):
705
703
# homogeneous scalar index: use IntervalTree
706
- target_as_index = self ._maybe_convert_i8 (target_as_index )
707
- indexer = self ._engine .get_indexer (target_as_index .values )
704
+ target = self ._maybe_convert_i8 (target )
705
+ indexer = self ._engine .get_indexer (target .values )
708
706
else :
709
707
# heterogeneous scalar index: defer elementwise to get_loc
710
- return self ._get_indexer_pointwise (target_as_index )[0 ]
708
+ return self ._get_indexer_pointwise (target )[0 ]
711
709
712
710
return ensure_platform_int (indexer )
713
711
0 commit comments