Skip to content

Commit

Permalink
support non_unique better
Browse files Browse the repository at this point in the history
  • Loading branch information
jreback committed Feb 16, 2017
1 parent 2d768f4 commit 9844010
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions pandas/indexes/interval.py
Original file line number Diff line number Diff line change
Expand Up @@ -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'])
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand All @@ -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
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit 9844010

Please sign in to comment.