Skip to content

Commit aa38199

Browse files
committed
BUG: fixed issue with drop on a non-unique index with Series (GH5248)
1 parent 300a895 commit aa38199

File tree

5 files changed

+35
-3
lines changed

5 files changed

+35
-3
lines changed

doc/source/release.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,7 @@ Bug Fixes
621621
non-business date. (:issue:`5203`)
622622
- Fixed bug in Excel writers where frames with duplicate column names weren't
623623
written correctly. (:issue:`5235`)
624+
- Fixed issue with ``drop`` and a non-unique index on Series (:issue:`5248`)
624625

625626
pandas 0.12.0
626627
-------------

pandas/core/generic.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1103,6 +1103,8 @@ def drop(self, labels, axis=0, level=None):
11031103
"""
11041104
axis_name = self._get_axis_name(axis)
11051105
axis, axis_ = self._get_axis(axis), axis
1106+
if not is_list_like(labels):
1107+
labels = [ labels ]
11061108

11071109
if axis.is_unique:
11081110
if level is not None:

pandas/core/indexing.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -581,9 +581,11 @@ def _multi_take_opportunity(self, tup):
581581
return False
582582

583583
# just too complicated
584-
for ax in self.obj._data.axes:
584+
for indexer, ax in zip(tup,self.obj._data.axes):
585585
if isinstance(ax, MultiIndex):
586586
return False
587+
elif com._is_bool_indexer(indexer):
588+
return False
587589

588590
return True
589591

pandas/tests/test_frame.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3175,9 +3175,11 @@ def check(result, expected=None):
31753175

31763176
# drop
31773177
df = DataFrame([[1,5,7.],[1,5,7.],[1,5,7.]],columns=['bar','a','a'])
3178-
df = df.drop(['a'],axis=1)
3178+
result = df.drop(['a'],axis=1)
31793179
expected = DataFrame([[1],[1],[1]],columns=['bar'])
3180-
check(df,expected)
3180+
check(result,expected)
3181+
result = df.drop('a',axis=1)
3182+
check(result,expected)
31813183

31823184
# describe
31833185
df = DataFrame([[1,1,1],[2,2,2],[3,3,3]],columns=['bar','a','a'],dtype='float64')

pandas/tests/test_series.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1415,6 +1415,31 @@ def test_mask(self):
14151415
rs = s.where(cond, np.nan)
14161416
assert_series_equal(rs, s.mask(~cond))
14171417

1418+
def test_drop(self):
1419+
1420+
# unique
1421+
s = Series([1,2],index=['one','two'])
1422+
expected = Series([1],index=['one'])
1423+
result = s.drop(['two'])
1424+
assert_series_equal(result,expected)
1425+
result = s.drop('two')
1426+
assert_series_equal(result,expected)
1427+
1428+
# non-unique
1429+
# GH 5248
1430+
s = Series([1,1,2],index=['one','two','one'])
1431+
expected = Series([1,2],index=['one','one'])
1432+
result = s.drop(['two'])
1433+
assert_series_equal(result,expected)
1434+
result = s.drop('two')
1435+
assert_series_equal(result,expected)
1436+
1437+
expected = Series([1],index=['two'])
1438+
result = s.drop(['one'])
1439+
assert_series_equal(result,expected)
1440+
result = s.drop('one')
1441+
assert_series_equal(result,expected)
1442+
14181443
def test_ix_setitem(self):
14191444
inds = self.series.index[[3, 4, 7]]
14201445

0 commit comments

Comments
 (0)