Skip to content

Commit 9ddfc57

Browse files
committed
BUG: Int64Index.take and MultiIndex.take don't lost names, GH #262
1 parent 06130c6 commit 9ddfc57

File tree

4 files changed

+18
-2
lines changed

4 files changed

+18
-2
lines changed

RELEASE.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,8 @@ feedback on the library.
158158
- `DataFrame.iteritems` and `DataFrame._series` not assigning name attribute
159159
- Panel.__repr__ raised exception on length-0 major/minor axes
160160
- `DataFrame.join` on key with empty DataFrame produced incorrect columns
161+
- `Int64Index.take` and `MultiIndex.take` lost name field, fix downstream
162+
issue GH #262
161163
- `read_csv` / `read_table` fixes
162164
- Be less aggressive about converting float->int in cases of floating point
163165
representations of integers like 1.0, 2.0, etc.

pandas/core/index.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -759,7 +759,7 @@ def take(self, *args, **kwargs):
759759
Analogous to ndarray.take
760760
"""
761761
taken = self.values.take(*args, **kwargs)
762-
return Int64Index(taken)
762+
return Int64Index(taken, name=self.name)
763763

764764
class DateIndex(Index):
765765
pass
@@ -1064,7 +1064,8 @@ def take(self, *args, **kwargs):
10641064
Analogous to ndarray.take
10651065
"""
10661066
new_labels = [lab.take(*args, **kwargs) for lab in self.labels]
1067-
return MultiIndex(levels=self.levels, labels=new_labels)
1067+
return MultiIndex(levels=self.levels, labels=new_labels,
1068+
names=self.names)
10681069

10691070
def append(self, other):
10701071
"""

pandas/tests/test_index.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,11 @@ def test_prevent_casting(self):
556556
result = self.index.astype('O')
557557
self.assert_(result.dtype == np.object_)
558558

559+
def test_take_preserve_name(self):
560+
index = Int64Index([1,2,3,4], name='foo')
561+
taken = index.take([3,0,1])
562+
self.assertEqual(index.name, taken.name)
563+
559564
class TestMultiIndex(unittest.TestCase):
560565

561566
def setUp(self):
@@ -967,6 +972,10 @@ def test_insert(self):
967972
# key wrong length
968973
self.assertRaises(Exception, self.index.insert, 0, ('foo2',))
969974

975+
def test_take_preserve_name(self):
976+
taken = self.index.take([3,0,1])
977+
self.assertEqual(taken.names, self.index.names)
978+
970979
class TestFactor(unittest.TestCase):
971980

972981
def setUp(self):

pandas/tests/test_multilevel.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ def test_reindex_preserve_levels(self):
7575
chunk = ymdT.ix[:, new_index]
7676
self.assert_(chunk.columns is new_index)
7777

78+
def test_sort_index_preserve_levels(self):
79+
result = self.frame.sort_index()
80+
self.assertEquals(result.index.names, self.frame.index.names)
81+
7882
def test_repr_to_string(self):
7983
repr(self.frame)
8084
repr(self.ymd)

0 commit comments

Comments
 (0)