Skip to content

Commit 542b8ff

Browse files
committed
BUG: closes #719, check for sortedness of multiindex in to_panel
1 parent e3df4e2 commit 542b8ff

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

pandas/core/frame.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -815,19 +815,24 @@ def to_panel(self):
815815

816816
self._consolidate_inplace()
817817

818-
major_axis, minor_axis = self.index.levels
819-
major_labels, minor_labels = self.index.labels
818+
if not self.index.is_monotonic:
819+
selfsorted = self.sort()
820+
else:
821+
selfsorted = self
822+
823+
major_axis, minor_axis = selfsorted.index.levels
824+
major_labels, minor_labels = selfsorted.index.labels
820825

821826
shape = len(major_axis), len(minor_axis)
822827

823828
new_blocks = []
824-
for block in self._data.blocks:
829+
for block in selfsorted._data.blocks:
825830
newb = block2d_to_block3d(block.values.T, block.items, shape,
826831
major_labels, minor_labels,
827-
ref_items=self.columns)
832+
ref_items=selfsorted.columns)
828833
new_blocks.append(newb)
829834

830-
new_axes = [self.columns, major_axis, minor_axis]
835+
new_axes = [selfsorted.columns, major_axis, minor_axis]
831836
new_mgr = BlockManager(new_blocks, new_axes)
832837

833838
return Panel(new_mgr)

pandas/tests/test_panel.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -965,6 +965,14 @@ def test_group_agg(self):
965965
f2 = lambda x: np.zeros((2,2))
966966
self.assertRaises(Exception, group_agg, values, bounds, f2)
967967

968+
def test_from_frame_unsorted(self):
969+
tuples = [('MSFT', 3), ('AAPL', 3), ('MSFT', 1),
970+
('AAPL', 1), ('MSFT', 2)]
971+
midx = MultiIndex.from_tuples(tuples)
972+
df = DataFrame(np.random.rand(5,4), index=midx)
973+
p = df.to_panel()
974+
assert_frame_equal(p.major_xs('MSFT'), df.sort().ix['MSFT',:])
975+
968976
class TestLongPanel(unittest.TestCase):
969977
"""
970978
LongPanel no longer exists, but...

0 commit comments

Comments
 (0)