Skip to content

Commit cfc9c0e

Browse files
authored
BUG: DataFrame.unstack with non-consolidated (#34709)
1 parent 55adcb8 commit cfc9c0e

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

pandas/core/reshape/reshape.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@ class _Unstacker:
4141
4242
Parameters
4343
----------
44-
index : object
45-
Pandas ``Index``
44+
index : MultiIndex
4645
level : int or str, default last level
4746
Level to "unstack". Accepts a name for the level.
4847
fill_value : scalar, optional
@@ -83,7 +82,7 @@ class _Unstacker:
8382
"""
8483

8584
def __init__(
86-
self, index, level=-1, constructor=None,
85+
self, index: MultiIndex, level=-1, constructor=None,
8786
):
8887

8988
if constructor is None:
@@ -415,7 +414,7 @@ def unstack(obj, level, fill_value=None):
415414
level = obj.index._get_level_number(level)
416415

417416
if isinstance(obj, DataFrame):
418-
if isinstance(obj.index, MultiIndex) or not obj._can_fast_transpose:
417+
if isinstance(obj.index, MultiIndex):
419418
return _unstack_frame(obj, level, fill_value=fill_value)
420419
else:
421420
return obj.T.stack(dropna=False)

pandas/tests/frame/test_reshape.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,17 @@ def test_stack_mixed_level(self):
140140
expected = expected[["a", "b"]]
141141
tm.assert_frame_equal(result, expected)
142142

143+
def test_unstack_not_consolidated(self):
144+
# Gh#34708
145+
df = pd.DataFrame({"x": [1, 2, np.NaN], "y": [3.0, 4, np.NaN]})
146+
df2 = df[["x"]]
147+
df2["y"] = df["y"]
148+
assert len(df2._mgr.blocks) == 2
149+
150+
res = df2.unstack()
151+
expected = df.unstack()
152+
tm.assert_series_equal(res, expected)
153+
143154
def test_unstack_fill(self):
144155

145156
# GH #9746: fill_value keyword argument for Series

0 commit comments

Comments
 (0)