Skip to content

Commit 10f4ada

Browse files
author
tp
committed
Proof of performance
1 parent dc45fba commit 10f4ada

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

pandas/core/indexes/base.py

+4
Original file line numberDiff line numberDiff line change
@@ -2944,6 +2944,10 @@ def _get_unique_index(self, dropna=False):
29442944
-------
29452945
loc : int if unique index, slice if monotonic index, else mask
29462946
2947+
Raises
2948+
------
2949+
KeyError : If key is not in self
2950+
29472951
Examples
29482952
---------
29492953
>>> unique_index = pd.Index(list('abc'))

pandas/core/indexes/category.py

+12
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,10 @@ def get_loc(self, key, method=None):
415415
-------
416416
loc : int if unique index, slice if monotonic index, else mask
417417
418+
Raises
419+
------
420+
KeyError : If key is not in self
421+
418422
Examples
419423
---------
420424
>>> unique_index = pd.CategoricalIndex(list('abc'))
@@ -432,6 +436,14 @@ def get_loc(self, key, method=None):
432436
codes = self.categories.get_loc(key)
433437
if (codes == -1):
434438
raise KeyError(key)
439+
440+
if self.is_monotonic_increasing and not self.is_unique:
441+
if codes not in self._engine:
442+
raise KeyError(key)
443+
codes = self.codes.dtype.type(codes)
444+
lhs = self.codes.searchsorted(codes, side='left')
445+
rhs = self.codes.searchsorted(codes, side='right')
446+
return slice(lhs, rhs)
435447
return self._engine.get_loc(codes)
436448

437449
def get_value(self, series, key):

0 commit comments

Comments
 (0)