Skip to content

Commit b84c839

Browse files
committed
PERF: Don't create a CategoricalIndex._engine in __contains__ if categories are RangeIndex
1 parent dcb5494 commit b84c839

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

pandas/core/indexes/category.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -377,8 +377,11 @@ def __contains__(self, key: Any) -> bool:
377377
# if key is a NaN, check if any NaN is in self.
378378
if is_valid_na_for_dtype(key, self.categories.dtype):
379379
return self.hasnans
380-
381-
return contains(self, key, container=self._engine)
380+
if self.categories._typ == "rangeindex":
381+
container = self.categories
382+
else:
383+
container = self._engine
384+
return contains(self, key, container=container)
382385

383386
def reindex(
384387
self, target, method=None, level=None, limit: int | None = None, tolerance=None

pandas/tests/indexes/categorical/test_category.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,3 +392,10 @@ def test_remove_maintains_order(self):
392392
["a", "b", np.nan, "d", "d", "a"], categories=list("dba"), ordered=True
393393
),
394394
)
395+
396+
397+
def test_contains_rangeindex_categories_no_engine():
398+
ci = CategoricalIndex(range(3))
399+
assert 2 in ci
400+
assert 5 not in ci
401+
assert "_engine" not in ci._cache

0 commit comments

Comments
 (0)