BUG: InvalidIndexError raised in Categorical.isin for categorical backed by interval with overlapping intervals · Issue #34974 · pandas-dev/pandas (original) (raw)

Code Sample, a copy-pastable example

In [1]: import pandas as pd In [2]: idx = pd.IntervalIndex([pd.Interval(0, 2), pd.Interval(0, 1)])

In [3]: pd.Categorical(idx).isin(idx)

InvalidIndexError Traceback (most recent call last) in ----> 1 pd.Categorical(idx).isin(idx)

~/sandbox/pandas/pandas/core/arrays/categorical.py in isin(self, values) 2359 values = sanitize_array(values, None, None) 2360 null_mask = np.asarray(isna(values)) -> 2361 code_values = self.categories.get_indexer(values) 2362 code_values = code_values[null_mask | (code_values >= 0)] 2363 return algorithms.isin(self.codes, code_values)

~/sandbox/pandas/pandas/core/indexes/interval.py in get_indexer(self, target, method, limit, tolerance) 764 if self.is_overlapping: 765 raise InvalidIndexError( --> 766 "cannot handle overlapping indices; " 767 "use IntervalIndex.get_indexer_non_unique" 768 )

InvalidIndexError: cannot handle overlapping indices; use IntervalIndex.get_indexer_non_unique

Problem description

The result is unambigous

Expected Output

I think that the call to self.categories.get_indexer might be self.categories.get_indexer_for instead.