Skip to content

Commit c608406

Browse files
committed
Merge pull request #5906 from jreback/panel_reindex
BUG: Bug in fully reindexing a Panel (GH5905)
2 parents e29c8e8 + 336cc2a commit c608406

File tree

3 files changed

+43
-43
lines changed

3 files changed

+43
-43
lines changed

doc/source/release.rst

+1
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ Bug Fixes
8585
- Bug in internal caching, related to (:issue:`5727`)
8686
- Testing bug in reading json/msgpack from a non-filepath on windows under py3 (:issue:`5874`)
8787
- Bug when assigning to .ix[tuple(...)] (:issue:`5896`)
88+
- Bug in fully reindexing a Panel (:issue:`5905`)
8889

8990
pandas 0.13.0
9091
-------------

pandas/core/panel.py

+2-35
Original file line numberDiff line numberDiff line change
@@ -585,41 +585,8 @@ def tail(self, n=5):
585585
raise NotImplementedError
586586

587587
def _needs_reindex_multi(self, axes, method, level):
588-
# only allowing multi-index on Panel (and not > dims)
589-
return (method is None and
590-
not self._is_mixed_type and
591-
self._AXIS_LEN <= 3 and
592-
com._count_not_none(*axes.values()) == 3)
593-
594-
def _reindex_multi(self, axes, copy, fill_value):
595-
""" we are guaranteed non-Nones in the axes! """
596-
items = axes['items']
597-
major = axes['major_axis']
598-
minor = axes['minor_axis']
599-
a0, a1, a2 = len(items), len(major), len(minor)
600-
601-
values = self.values
602-
new_values = np.empty((a0, a1, a2), dtype=values.dtype)
603-
604-
new_items, indexer0 = self.items.reindex(items)
605-
new_major, indexer1 = self.major_axis.reindex(major)
606-
new_minor, indexer2 = self.minor_axis.reindex(minor)
607-
608-
if indexer0 is None:
609-
indexer0 = lrange(len(new_items))
610-
611-
if indexer1 is None:
612-
indexer1 = lrange(len(new_major))
613-
614-
if indexer2 is None:
615-
indexer2 = lrange(len(new_minor))
616-
617-
for i, ind in enumerate(indexer0):
618-
com.take_2d_multi(values[ind], (indexer1, indexer2),
619-
out=new_values[i])
620-
621-
return Panel(new_values, items=new_items, major_axis=new_major,
622-
minor_axis=new_minor)
588+
""" don't allow a multi reindex on Panel or above ndim """
589+
return False
623590

624591
def dropna(self, axis=0, how='any', inplace=False, **kwargs):
625592
"""

pandas/tests/test_panel.py

+40-8
Original file line numberDiff line numberDiff line change
@@ -1082,14 +1082,6 @@ def test_reindex(self):
10821082
result = self.panel.reindex(minor=new_minor)
10831083
assert_frame_equal(result['ItemB'], ref.reindex(columns=new_minor))
10841084

1085-
result = self.panel.reindex(items=self.panel.items,
1086-
major=self.panel.major_axis,
1087-
minor=self.panel.minor_axis)
1088-
1089-
self.assert_(result.items is self.panel.items)
1090-
self.assert_(result.major_axis is self.panel.major_axis)
1091-
self.assert_(result.minor_axis is self.panel.minor_axis)
1092-
10931085
# this ok
10941086
result = self.panel.reindex()
10951087
assert_panel_equal(result,self.panel)
@@ -1110,6 +1102,46 @@ def test_reindex(self):
11101102
assert_panel_equal(result,self.panel)
11111103
self.assert_((result is self.panel) == True)
11121104

1105+
def test_reindex_multi(self):
1106+
1107+
# with and without copy full reindexing
1108+
result = self.panel.reindex(items=self.panel.items,
1109+
major=self.panel.major_axis,
1110+
minor=self.panel.minor_axis,
1111+
copy = False)
1112+
1113+
self.assert_(result.items is self.panel.items)
1114+
self.assert_(result.major_axis is self.panel.major_axis)
1115+
self.assert_(result.minor_axis is self.panel.minor_axis)
1116+
1117+
result = self.panel.reindex(items=self.panel.items,
1118+
major=self.panel.major_axis,
1119+
minor=self.panel.minor_axis,
1120+
copy = False)
1121+
assert_panel_equal(result,self.panel)
1122+
1123+
# multi-axis indexing consistency
1124+
# GH 5900
1125+
df = DataFrame(np.random.randn(4,3))
1126+
p = Panel({ 'Item1' : df })
1127+
expected = Panel({ 'Item1' : df })
1128+
expected['Item2'] = np.nan
1129+
1130+
items = ['Item1','Item2']
1131+
major_axis = np.arange(4)
1132+
minor_axis = np.arange(3)
1133+
1134+
results = []
1135+
results.append(p.reindex(items=items, major_axis=major_axis, copy=True))
1136+
results.append(p.reindex(items=items, major_axis=major_axis, copy=False))
1137+
results.append(p.reindex(items=items, minor_axis=minor_axis, copy=True))
1138+
results.append(p.reindex(items=items, minor_axis=minor_axis, copy=False))
1139+
results.append(p.reindex(items=items, major_axis=major_axis, minor_axis=minor_axis, copy=True))
1140+
results.append(p.reindex(items=items, major_axis=major_axis, minor_axis=minor_axis, copy=False))
1141+
1142+
for i, r in enumerate(results):
1143+
assert_panel_equal(expected,r)
1144+
11131145
def test_reindex_like(self):
11141146
# reindex_like
11151147
smaller = self.panel.reindex(items=self.panel.items[:-1],

0 commit comments

Comments
 (0)