Skip to content

Commit 9bb8348

Browse files
committed
BUG: mixed column selection with dups is buggy (GH5639)
1 parent 68946db commit 9bb8348

File tree

3 files changed

+14
-5
lines changed

3 files changed

+14
-5
lines changed

doc/source/release.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -768,7 +768,7 @@ Bug Fixes
768768
- Fixed segfault on ``isnull(MultiIndex)`` (now raises an error instead)
769769
(:issue:`5123`, :issue:`5125`)
770770
- Allow duplicate indices when performing operations that align
771-
(:issue:`5185`)
771+
(:issue:`5185`, :issue:`5639`)
772772
- Compound dtypes in a constructor raise ``NotImplementedError``
773773
(:issue:`5191`)
774774
- Bug in comparing duplicate frames (:issue:`4421`) related

pandas/core/internals.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -250,10 +250,9 @@ def reindex_items_from(self, new_ref_items, indexer=None, method=None,
250250
else:
251251

252252
masked_idx = indexer[indexer != -1]
253+
new_items = self.items.take(masked_idx)
253254
new_values = com.take_nd(self.values, masked_idx, axis=0,
254255
allow_fill=False)
255-
new_items = self.items.take(masked_idx)
256-
257256
# fill if needed
258257
if needs_fill:
259258
new_values = com.interpolate_2d(new_values, method=method,
@@ -3192,7 +3191,8 @@ def reindex_items(self, new_items, indexer=None, copy=True,
31923191
else:
31933192

31943193
# unique
3195-
if self.axes[0].is_unique:
3194+
if self.axes[0].is_unique and new_items.is_unique:
3195+
31963196
for block in self.blocks:
31973197

31983198
newb = block.reindex_items_from(new_items, copy=copy)
@@ -3201,7 +3201,7 @@ def reindex_items(self, new_items, indexer=None, copy=True,
32013201

32023202
# non-unique
32033203
else:
3204-
rl = self._set_ref_locs()
3204+
rl = self._set_ref_locs(do_refs='force')
32053205
for i, idx in enumerate(indexer):
32063206
blk, lidx = rl[idx]
32073207
item = new_items.take([i])

pandas/tests/test_frame.py

+9
Original file line numberDiff line numberDiff line change
@@ -3275,6 +3275,15 @@ def check(result, expected=None):
32753275
expected = DataFrame([[False,True],[True,False],[False,False],[True,False]],columns=['A','A'])
32763276
assert_frame_equal(result,expected)
32773277

3278+
# mixed column selection
3279+
# GH 5639
3280+
dfbool = DataFrame({'one' : Series([True, True, False], index=['a', 'b', 'c']),
3281+
'two' : Series([False, False, True, False], index=['a', 'b', 'c', 'd']),
3282+
'three': Series([False, True, True, True], index=['a', 'b', 'c', 'd'])})
3283+
expected = pd.concat([dfbool['one'],dfbool['three'],dfbool['one']],axis=1)
3284+
result = dfbool[['one', 'three', 'one']]
3285+
check(result,expected)
3286+
32783287
def test_insert_benchmark(self):
32793288
# from the vb_suite/frame_methods/frame_insert_columns
32803289
N = 10

0 commit comments

Comments
 (0)