Skip to content

Commit

Permalink
BUG: Int64Index.take and MultiIndex.take don't lost names, GH #262
Browse files Browse the repository at this point in the history
  • Loading branch information
wesm committed Oct 20, 2011
1 parent 06130c6 commit 9ddfc57
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 2 deletions.
2 changes: 2 additions & 0 deletions RELEASE.rst
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,8 @@ feedback on the library.
- `DataFrame.iteritems` and `DataFrame._series` not assigning name attribute
- Panel.__repr__ raised exception on length-0 major/minor axes
- `DataFrame.join` on key with empty DataFrame produced incorrect columns
- `Int64Index.take` and `MultiIndex.take` lost name field, fix downstream
issue GH #262
- `read_csv` / `read_table` fixes
- Be less aggressive about converting float->int in cases of floating point
representations of integers like 1.0, 2.0, etc.
Expand Down
5 changes: 3 additions & 2 deletions pandas/core/index.py
Original file line number Diff line number Diff line change
Expand Up @@ -759,7 +759,7 @@ def take(self, *args, **kwargs):
Analogous to ndarray.take
"""
taken = self.values.take(*args, **kwargs)
return Int64Index(taken)
return Int64Index(taken, name=self.name)

class DateIndex(Index):
pass
Expand Down Expand Up @@ -1064,7 +1064,8 @@ def take(self, *args, **kwargs):
Analogous to ndarray.take
"""
new_labels = [lab.take(*args, **kwargs) for lab in self.labels]
return MultiIndex(levels=self.levels, labels=new_labels)
return MultiIndex(levels=self.levels, labels=new_labels,
names=self.names)

def append(self, other):
"""
Expand Down
9 changes: 9 additions & 0 deletions pandas/tests/test_index.py
Original file line number Diff line number Diff line change
Expand Up @@ -556,6 +556,11 @@ def test_prevent_casting(self):
result = self.index.astype('O')
self.assert_(result.dtype == np.object_)

def test_take_preserve_name(self):
index = Int64Index([1,2,3,4], name='foo')
taken = index.take([3,0,1])
self.assertEqual(index.name, taken.name)

class TestMultiIndex(unittest.TestCase):

def setUp(self):
Expand Down Expand Up @@ -967,6 +972,10 @@ def test_insert(self):
# key wrong length
self.assertRaises(Exception, self.index.insert, 0, ('foo2',))

def test_take_preserve_name(self):
taken = self.index.take([3,0,1])
self.assertEqual(taken.names, self.index.names)

class TestFactor(unittest.TestCase):

def setUp(self):
Expand Down
4 changes: 4 additions & 0 deletions pandas/tests/test_multilevel.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,10 @@ def test_reindex_preserve_levels(self):
chunk = ymdT.ix[:, new_index]
self.assert_(chunk.columns is new_index)

def test_sort_index_preserve_levels(self):
result = self.frame.sort_index()
self.assertEquals(result.index.names, self.frame.index.names)

def test_repr_to_string(self):
repr(self.frame)
repr(self.ymd)
Expand Down

0 comments on commit 9ddfc57

Please sign in to comment.