From cda0ac1624f76a4760cca8ce273c526429fc0788 Mon Sep 17 00:00:00 2001 From: ganevgv Date: Thu, 7 Nov 2019 02:11:22 +0000 Subject: [PATCH 1/3] add test for empty frame groupby dtypes consistence --- pandas/tests/test_multilevel.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pandas/tests/test_multilevel.py b/pandas/tests/test_multilevel.py index 79c9fe2b60bd9..46c5a49bcda6d 100644 --- a/pandas/tests/test_multilevel.py +++ b/pandas/tests/test_multilevel.py @@ -1490,6 +1490,19 @@ def test_frame_dict_constructor_empty_series(self): DataFrame({"foo": s1, "bar": s2, "baz": s3}) DataFrame.from_dict({"foo": s1, "baz": s3, "bar": s2}) + def test_empty_frame_groupby_dtypes_consistency(self): + # GH 20888 + group_keys = ["a", "b", "c"] + df = DataFrame({"a": [1], "b": [2], "c": [3], "d": [4]}) + g = df[df.a == 2].groupby(group_keys) + expected = g.first().index + + df = DataFrame({"a": [1], "b": [2], "c": [3], "d": ["d"]}) + g = df[df.a == 2].groupby(group_keys) + result = g.first().index + + tm.assert_index_equal(result, expected) + def test_multiindex_na_repr(self): # only an issue with long columns df3 = DataFrame( From d9ef578bf0c725f7dc95f0d5e13b074681a323cf Mon Sep 17 00:00:00 2001 From: ganevgv Date: Thu, 7 Nov 2019 21:57:25 +0000 Subject: [PATCH 2/3] use parameterization --- pandas/tests/test_multilevel.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/pandas/tests/test_multilevel.py b/pandas/tests/test_multilevel.py index 46c5a49bcda6d..33a4eca16bf75 100644 --- a/pandas/tests/test_multilevel.py +++ b/pandas/tests/test_multilevel.py @@ -1490,17 +1490,14 @@ def test_frame_dict_constructor_empty_series(self): DataFrame({"foo": s1, "bar": s2, "baz": s3}) DataFrame.from_dict({"foo": s1, "baz": s3, "bar": s2}) - def test_empty_frame_groupby_dtypes_consistency(self): + @pytest.mark.parametrize("d", [4, "d"]) + def test_empty_frame_groupby_dtypes_consistency(self, d): # GH 20888 - group_keys = ["a", "b", "c"] - df = DataFrame({"a": [1], "b": [2], "c": [3], "d": [4]}) - g = df[df.a == 2].groupby(group_keys) - expected = g.first().index - - df = DataFrame({"a": [1], "b": [2], "c": [3], "d": ["d"]}) + group_keys = [...] + df = DataFrame({"a": [1], "b": [2], "c": [3], "d": [d]}) g = df[df.a == 2].groupby(group_keys) result = g.first().index - + expected = Index([], dtype=int) tm.assert_index_equal(result, expected) def test_multiindex_na_repr(self): From cbfb87716e624b6a293fdcb1b3a41f4dd49e05bf Mon Sep 17 00:00:00 2001 From: ganevgv Date: Fri, 8 Nov 2019 00:13:20 +0000 Subject: [PATCH 3/3] correct group keys --- pandas/tests/test_multilevel.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pandas/tests/test_multilevel.py b/pandas/tests/test_multilevel.py index 33a4eca16bf75..a535fcc511daa 100644 --- a/pandas/tests/test_multilevel.py +++ b/pandas/tests/test_multilevel.py @@ -1493,11 +1493,15 @@ def test_frame_dict_constructor_empty_series(self): @pytest.mark.parametrize("d", [4, "d"]) def test_empty_frame_groupby_dtypes_consistency(self, d): # GH 20888 - group_keys = [...] + group_keys = ["a", "b", "c"] df = DataFrame({"a": [1], "b": [2], "c": [3], "d": [d]}) + g = df[df.a == 2].groupby(group_keys) result = g.first().index - expected = Index([], dtype=int) + expected = MultiIndex( + levels=[[1], [2], [3]], codes=[[], [], []], names=["a", "b", "c"] + ) + tm.assert_index_equal(result, expected) def test_multiindex_na_repr(self):