Skip to content

Commit 464cff2

Browse files
committed
more indexing
1 parent 46f5179 commit 464cff2

File tree

2 files changed

+31
-6
lines changed

2 files changed

+31
-6
lines changed

pandas/indexes/interval.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -514,13 +514,16 @@ def get_indexer(self, target, method=None, limit=None, tolerance=None):
514514
raise ValueError('indexer corresponds to non-unique elements')
515515
return np.where(start_plus_one == stop, start, -1)
516516

517+
if isinstance(target, IntervalIndex):
518+
raise NotImplementedError(
519+
'have not yet implemented get_indexer '
520+
'for IntervalIndex indexers')
521+
522+
if not self.is_unique:
523+
indexer, missing = self._engine.get_indexer_non_unique(target.values)
517524
else:
518-
if isinstance(target, IntervalIndex):
519-
raise NotImplementedError(
520-
'have not yet implemented get_indexer '
521-
'for IntervalIndex indexers')
522-
else:
523-
return self._engine.get_indexer(target.values)
525+
indexer = self._engine.get_indexer(target.values)
526+
return indexer
524527

525528
def sort_values(self, return_indexer=False, ascending=True):
526529
"""

pandas/tests/indexing/test_interval.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,28 @@ def test_loc_getitem_frame(self):
4141
expected = df.iloc[4:6]
4242
tm.assert_frame_equal(result, expected)
4343

44+
def f():
45+
df.loc[10]
46+
47+
self.assertRaises(KeyError, f)
48+
49+
# single list-like
4450
result = df.loc[[4]]
4551
expected = df.iloc[4:6]
4652
tm.assert_frame_equal(result, expected)
53+
54+
# non-unique
55+
result = df.loc[[4, 5]]
56+
expected = df.take([4, 5, 4, 5])
57+
tm.assert_frame_equal(result, expected)
58+
59+
def f():
60+
df.loc[[10]]
61+
62+
self.assertRaises(KeyError, f)
63+
64+
# this is a bit different than other .loc indexing
65+
def f():
66+
df.loc[[10, 4]]
67+
68+
self.assertRaises(KeyError, f)

0 commit comments

Comments
 (0)