Skip to content

Commit 476b6e3

Browse files
committed
Merge pull request #5573 from TomAugspurger/reorder_docstring
DOC/TST: Series.reorder_levels() can take names; added tests
2 parents 595f483 + 4e61636 commit 476b6e3

File tree

4 files changed

+81
-3
lines changed

4 files changed

+81
-3
lines changed

pandas/core/frame.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -2794,9 +2794,9 @@ def reorder_levels(self, order, axis=0):
27942794
27952795
Parameters
27962796
----------
2797-
order : list of int
2797+
order : list of int or list of str
27982798
List representing new level order. Reference level by number
2799-
not by key.
2799+
(position) or by key (label).
28002800
axis : int
28012801
Where to reorder levels.
28022802

pandas/core/series.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1869,7 +1869,7 @@ def reorder_levels(self, order):
18691869
Parameters
18701870
----------
18711871
order: list of int representing new level order.
1872-
(reference level by number not by key)
1872+
(reference level by number or key)
18731873
axis: where to reorder levels
18741874
18751875
Returns

pandas/tests/test_frame.py

+40
Original file line numberDiff line numberDiff line change
@@ -9185,6 +9185,46 @@ def test_select(self):
91859185

91869186
assert_frame_equal(result, expected, check_names=False) # TODO should reindex check_names?
91879187

9188+
def test_reorder_levels(self):
9189+
index = MultiIndex(levels=[['bar'], ['one', 'two', 'three'], [0, 1]],
9190+
labels=[[0, 0, 0, 0, 0, 0],
9191+
[0, 1, 2, 0, 1, 2],
9192+
[0, 1, 0, 1, 0, 1]],
9193+
names=['L0', 'L1', 'L2'])
9194+
df = DataFrame({'A': np.arange(6), 'B': np.arange(6)}, index=index)
9195+
9196+
# no change, position
9197+
result = df.reorder_levels([0, 1, 2])
9198+
assert_frame_equal(df, result)
9199+
9200+
# no change, labels
9201+
result = df.reorder_levels(['L0', 'L1', 'L2'])
9202+
assert_frame_equal(df, result)
9203+
9204+
# rotate, position
9205+
result = df.reorder_levels([1, 2, 0])
9206+
e_idx = MultiIndex(levels=[['one', 'two', 'three'], [0, 1], ['bar']],
9207+
labels=[[0, 1, 2, 0, 1, 2],
9208+
[0, 1, 0, 1, 0, 1],
9209+
[0, 0, 0, 0, 0, 0]],
9210+
names=['L1', 'L2', 'L0'])
9211+
expected = DataFrame({'A': np.arange(6), 'B': np.arange(6)},
9212+
index=e_idx)
9213+
assert_frame_equal(result, expected)
9214+
9215+
result = df.reorder_levels([0, 0, 0])
9216+
e_idx = MultiIndex(levels=[['bar'], ['bar'], ['bar']],
9217+
labels=[[0, 0, 0, 0, 0, 0],
9218+
[0, 0, 0, 0, 0, 0],
9219+
[0, 0, 0, 0, 0, 0]],
9220+
names=['L0', 'L0', 'L0'])
9221+
expected = DataFrame({'A': np.arange(6), 'B': np.arange(6)},
9222+
index=e_idx)
9223+
assert_frame_equal(result, expected)
9224+
9225+
result = df.reorder_levels(['L0', 'L0', 'L0'])
9226+
assert_frame_equal(result, expected)
9227+
91889228
def test_sort_index(self):
91899229
frame = DataFrame(np.random.randn(4, 4), index=[1, 2, 3, 4],
91909230
columns=['A', 'B', 'C', 'D'])

pandas/tests/test_series.py

+38
Original file line numberDiff line numberDiff line change
@@ -1854,6 +1854,44 @@ def test_argsort_stable(self):
18541854
self.assert_(np.array_equal(qindexer, qexpected))
18551855
self.assert_(not np.array_equal(qindexer, mindexer))
18561856

1857+
def test_reorder_levels(self):
1858+
index = MultiIndex(levels=[['bar'], ['one', 'two', 'three'], [0, 1]],
1859+
labels=[[0, 0, 0, 0, 0, 0],
1860+
[0, 1, 2, 0, 1, 2],
1861+
[0, 1, 0, 1, 0, 1]],
1862+
names=['L0', 'L1', 'L2'])
1863+
s = Series(np.arange(6), index=index)
1864+
1865+
# no change, position
1866+
result = s.reorder_levels([0, 1, 2])
1867+
assert_series_equal(s, result)
1868+
1869+
# no change, labels
1870+
result = s.reorder_levels(['L0', 'L1', 'L2'])
1871+
assert_series_equal(s, result)
1872+
1873+
# rotate, position
1874+
result = s.reorder_levels([1, 2, 0])
1875+
e_idx = MultiIndex(levels=[['one', 'two', 'three'], [0, 1], ['bar']],
1876+
labels=[[0, 1, 2, 0, 1, 2],
1877+
[0, 1, 0, 1, 0, 1],
1878+
[0, 0, 0, 0, 0, 0]],
1879+
names=['L1', 'L2', 'L0'])
1880+
expected = Series(np.arange(6), index=e_idx)
1881+
assert_series_equal(result, expected)
1882+
1883+
result = s.reorder_levels([0, 0, 0])
1884+
e_idx = MultiIndex(levels=[['bar'], ['bar'], ['bar']],
1885+
labels=[[0, 0, 0, 0, 0, 0],
1886+
[0, 0, 0, 0, 0, 0],
1887+
[0, 0, 0, 0, 0, 0]],
1888+
names=['L0', 'L0', 'L0'])
1889+
expected = Series(range(6), index=e_idx)
1890+
assert_series_equal(result, expected)
1891+
1892+
result = s.reorder_levels(['L0', 'L0', 'L0'])
1893+
assert_series_equal(result, expected)
1894+
18571895
def test_cumsum(self):
18581896
self._check_accum_op('cumsum')
18591897

0 commit comments

Comments
 (0)