Skip to content

Commit cd54aa9

Browse files
committed
BUG: MultiIndex.sortlevel did not preserve names GH #202
1 parent 9ae36ec commit cd54aa9

File tree

3 files changed

+21
-2
lines changed

3 files changed

+21
-2
lines changed

RELEASE.rst

+15
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,21 @@ Release Notes
55
This is the list of changes to pandas between each release. For full details,
66
see the commit logs at http://github.com/wesm/pandas
77

8+
pandas 0.4.3
9+
============
10+
11+
**Release date:** not yet released
12+
13+
**Improvements to existing features**
14+
15+
- Skip xlrd-related unit tests if not installed
16+
17+
**Bug fixes**
18+
19+
- Fix broken interaction between `Index` and `Int64Index` when calling
20+
intersection. Implement `Int64Index.intersection`
21+
- `MultiIndex.sortlevel` discarded the level names (GH #202)
22+
823
pandas 0.4.2
924
============
1025

pandas/core/index.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1120,7 +1120,7 @@ def sortlevel(self, level=0, ascending=True):
11201120

11211121
new_labels = [lab.take(indexer) for lab in self.labels]
11221122
new_index = MultiIndex(levels=self.levels, labels=new_labels,
1123-
sortorder=level)
1123+
names=self.names, sortorder=level)
11241124

11251125
return new_index, indexer
11261126

pandas/tests/test_multilevel.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ def setUp(self):
2424
index = MultiIndex(levels=[['foo', 'bar', 'baz', 'qux'],
2525
['one', 'two', 'three']],
2626
labels=[[0, 0, 0, 1, 1, 2, 2, 3, 3, 3],
27-
[0, 1, 2, 0, 1, 1, 2, 0, 1, 2]])
27+
[0, 1, 2, 0, 1, 1, 2, 0, 1, 2]],
28+
names=['first', 'second'])
2829
self.frame = DataFrame(np.random.randn(10, 3), index=index,
2930
columns=['A', 'B', 'C'])
3031

@@ -220,6 +221,9 @@ def test_sortlevel(self):
220221
self.assertRaises(Exception,
221222
self.frame.delevel()['A'].sortlevel)
222223

224+
# preserve names
225+
self.assertEquals(a_sorted.index.names, self.frame.index.names)
226+
223227
def test_sortlevel_by_name(self):
224228
self.frame.index.names = ['first', 'second']
225229
result = self.frame.sortlevel(level='second')

0 commit comments

Comments
 (0)