Skip to content

Commit 9844010

Browse files
committed
support non_unique better
1 parent 2d768f4 commit 9844010

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

pandas/indexes/interval.py

+15-6
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@
2020
from pandas._interval import (Interval, IntervalMixin, IntervalTree,
2121
intervals_to_interval_bounds)
2222
from pandas.util.decorators import cache_readonly, Appender
23+
import pandas.indexes.base as ibase
24+
_index_doc_kwargs = dict(ibase._index_doc_kwargs)
25+
_index_doc_kwargs.update(
26+
dict(klass='IntervalIndex',
27+
target_klass='IntervalIndex or list of Intervals'))
2328

2429

2530
_VALID_CLOSED = set(['left', 'right', 'both', 'neither'])
@@ -411,7 +416,7 @@ def _convert_list_indexer(self, keyarr, kind=None):
411416
Return our indexer or raise if all of the values are not
412417
included in the categories
413418
"""
414-
locs = self.get_indexer(keyarr)
419+
locs = self.get_indexer_for(keyarr)
415420
check = locs == -1
416421
locs = locs[~check]
417422
return locs
@@ -501,6 +506,7 @@ def get_value(self, series, key):
501506
loc = self.get_loc(key) # nb. this can't handle slice objects
502507
return series.iloc[loc]
503508

509+
@Appender(_index_shared_docs['get_indexer'] % _index_doc_kwargs)
504510
def get_indexer(self, target, method=None, limit=None, tolerance=None):
505511
self._check_method(method)
506512
target = _ensure_index(target)
@@ -519,12 +525,15 @@ def get_indexer(self, target, method=None, limit=None, tolerance=None):
519525
'for IntervalIndex indexers')
520526

521527
if not self.is_unique:
522-
indexer, missing = self._engine.get_indexer_non_unique(
523-
target.values)
524-
else:
525-
indexer = self._engine.get_indexer(target.values)
528+
raise ValueError("get_indexer cannot handle non-unique indices")
529+
530+
indexer = self._engine.get_indexer(target.values)
526531
return indexer
527532

533+
@Appender(_index_shared_docs['get_indexer_non_unique'] % _index_doc_kwargs)
534+
def get_indexer_non_unique(self, target):
535+
return super(IntervalIndex, self).get_indexer_non_unique(target)
536+
528537
def sort_values(self, return_indexer=False, ascending=True):
529538
"""
530539
Return sorted copy of Index
@@ -583,7 +592,7 @@ def _append_same_dtype(self, to_concat, name):
583592
raise ValueError(msg)
584593
return super(IntervalIndex, self)._append_same_dtype(to_concat, name)
585594

586-
@Appender(_index_shared_docs['take'])
595+
@Appender(_index_shared_docs['take'] % _index_doc_kwargs)
587596
def take(self, indices, axis=0, allow_fill=True,
588597
fill_value=None, **kwargs):
589598
nv.validate_take(tuple(), kwargs)

0 commit comments

Comments
 (0)