From 6a14fbfb79673aeedb38ab965cc7672f7c406c67 Mon Sep 17 00:00:00 2001 From: Mike Kelly Date: Sat, 22 Jun 2013 16:59:18 -0400 Subject: [PATCH] BUG: (GH3997) Fix for dropna=False in stack --- doc/source/release.rst | 1 + pandas/core/reshape.py | 2 +- pandas/tests/test_multilevel.py | 13 +++++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/doc/source/release.rst b/doc/source/release.rst index df09d2f5a50ba..0c413b2b8eafb 100644 --- a/doc/source/release.rst +++ b/doc/source/release.rst @@ -274,6 +274,7 @@ pandas 0.11.1 - csv parsers would loop infinitely if ``iterator=True`` but no ``chunksize`` was specified (:issue:`3967`), python parser failing with ``chunksize=1`` - Fix index name not propogating when using ``shift`` + - Fixed dropna=False being ignored with multi-index stack (:issue:`3997`) .. _Gh3616: https://github.com/pydata/pandas/issues/3616 diff --git a/pandas/core/reshape.py b/pandas/core/reshape.py index 3b275d1df4f6d..2cbeb1cf58a8f 100644 --- a/pandas/core/reshape.py +++ b/pandas/core/reshape.py @@ -492,7 +492,7 @@ def stack(frame, level=-1, dropna=True): level = frame.columns._get_level_number(level) if isinstance(frame.columns, MultiIndex): - return _stack_multi_columns(frame, level=level, dropna=True) + return _stack_multi_columns(frame, level=level, dropna=dropna) elif isinstance(frame.index, MultiIndex): new_levels = list(frame.index.levels) new_levels.append(frame.columns) diff --git a/pandas/tests/test_multilevel.py b/pandas/tests/test_multilevel.py index dba0a464d26c2..d852bad215f77 100644 --- a/pandas/tests/test_multilevel.py +++ b/pandas/tests/test_multilevel.py @@ -948,6 +948,19 @@ def test_stack_multiple_bug(self): xp.columns.name = 'Params' assert_frame_equal(rs, xp) + def test_stack_dropna(self): + # GH #3997 + df = pd.DataFrame({'A': ['a1', 'a2'], + 'B': ['b1', 'b2'], + 'C': [1, 1]}) + df = df.set_index(['A', 'B']) + + stacked = df.unstack().stack(dropna=False) + self.assertTrue(len(stacked) > len(stacked.dropna())) + + stacked = df.unstack().stack(dropna=True) + assert_frame_equal(stacked, stacked.dropna()) + def test_unstack_multiple_hierarchical(self): df = DataFrame(index=[[0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 1, 1, 0, 0, 1, 1],