From be778c43db9a863a6b1ac0544930fa859d429560 Mon Sep 17 00:00:00 2001 From: Jeff Reback Date: Wed, 15 Feb 2017 13:37:28 -0500 Subject: [PATCH] support non_unique better --- pandas/indexes/interval.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/pandas/indexes/interval.py b/pandas/indexes/interval.py index 8db25dcc73773..a2408069c386e 100644 --- a/pandas/indexes/interval.py +++ b/pandas/indexes/interval.py @@ -20,6 +20,11 @@ from pandas._interval import (Interval, IntervalMixin, IntervalTree, intervals_to_interval_bounds) from pandas.util.decorators import cache_readonly, Appender +import pandas.indexes.base as ibase +_index_doc_kwargs = dict(ibase._index_doc_kwargs) +_index_doc_kwargs.update( + dict(klass='IntervalIndex', + target_klass='IntervalIndex or list of Intervals')) _VALID_CLOSED = set(['left', 'right', 'both', 'neither']) @@ -411,7 +416,7 @@ def _convert_list_indexer(self, keyarr, kind=None): Return our indexer or raise if all of the values are not included in the categories """ - locs = self.get_indexer(keyarr) + locs = self.get_indexer_for(keyarr) check = locs == -1 locs = locs[~check] return locs @@ -501,6 +506,7 @@ def get_value(self, series, key): loc = self.get_loc(key) # nb. this can't handle slice objects return series.iloc[loc] + @Appender(_index_shared_docs['get_indexer'] % _index_doc_kwargs) def get_indexer(self, target, method=None, limit=None, tolerance=None): self._check_method(method) target = _ensure_index(target) @@ -519,12 +525,15 @@ def get_indexer(self, target, method=None, limit=None, tolerance=None): 'for IntervalIndex indexers') if not self.is_unique: - indexer, missing = self._engine.get_indexer_non_unique( - target.values) - else: - indexer = self._engine.get_indexer(target.values) + raise ValueError("get_indexer cannot handle non-unique indices") + + indexer = self._engine.get_indexer(target.values) return indexer + @Appender(_index_shared_docs['get_indexer_non_unique'] % _index_doc_kwargs) + def get_indexer_non_unique(self, target): + return super(IntervalIndex, self).get_indexer_non_unique(target) + def sort_values(self, return_indexer=False, ascending=True): """ Return sorted copy of Index @@ -583,7 +592,7 @@ def _append_same_dtype(self, to_concat, name): raise ValueError(msg) return super(IntervalIndex, self)._append_same_dtype(to_concat, name) - @Appender(_index_shared_docs['take']) + @Appender(_index_shared_docs['take'] % _index_doc_kwargs) def take(self, indices, axis=0, allow_fill=True, fill_value=None, **kwargs): nv.validate_take(tuple(), kwargs)