From 4b8e90dd84df5358ddc261064ca4917fc91b8063 Mon Sep 17 00:00:00 2001 From: kasim95 Date: Sat, 26 Dec 2020 17:25:02 -0800 Subject: [PATCH 1/3] BUG: Added test cases for GH#36936 --- pandas/tests/indexing/multiindex/test_loc.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/pandas/tests/indexing/multiindex/test_loc.py b/pandas/tests/indexing/multiindex/test_loc.py index 42525fc575397..b79326c444ec1 100644 --- a/pandas/tests/indexing/multiindex/test_loc.py +++ b/pandas/tests/indexing/multiindex/test_loc.py @@ -695,3 +695,22 @@ def test_loc_getitem_index_differently_ordered_slice_none(): columns=["a", "b"], ) tm.assert_frame_equal(result, expected) + + +def test_loc_empty_multiindex(): + # GH#36936 + arrays = [['a', 'a', 'b', 'a'], ['a', 'a', 'b', 'b']] + index = MultiIndex.from_arrays(arrays, names=('idx1', 'idx2')) + df = DataFrame([1, 2, 3, 4], index=index, columns=['value']) + + # loc on empty multiindex == loc with False mask + empty_multiindex = df.loc[df.loc[:, 'value'] == 0, :].index + result = df.loc[empty_multiindex, :] + expected = df.loc[[False] * len(df.index), :] + tm.assert_equal(result, expected) + + # replacing value with loc on empty multiindex + df.loc[df.loc[df.loc[:, 'value'] == 0].index, 'value'] = 5 + result = df + expected = DataFrame([1, 2, 3, 4], index=index, columns=['value']) + tm.assert_equal(result, expected) From 45982fdc04f5cb598ec4cea33aae17600c12e363 Mon Sep 17 00:00:00 2001 From: Kasim Date: Sun, 27 Dec 2020 02:09:51 +0000 Subject: [PATCH 2/3] TST: Fixed Precommit errors in test case --- pandas/tests/indexing/multiindex/test_loc.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pandas/tests/indexing/multiindex/test_loc.py b/pandas/tests/indexing/multiindex/test_loc.py index b79326c444ec1..6e8f14b03796a 100644 --- a/pandas/tests/indexing/multiindex/test_loc.py +++ b/pandas/tests/indexing/multiindex/test_loc.py @@ -699,18 +699,18 @@ def test_loc_getitem_index_differently_ordered_slice_none(): def test_loc_empty_multiindex(): # GH#36936 - arrays = [['a', 'a', 'b', 'a'], ['a', 'a', 'b', 'b']] - index = MultiIndex.from_arrays(arrays, names=('idx1', 'idx2')) - df = DataFrame([1, 2, 3, 4], index=index, columns=['value']) + arrays = [["a", "a", "b", "a"], ["a", "a", "b", "b"]] + index = MultiIndex.from_arrays(arrays, names=("idx1", "idx2")) + df = DataFrame([1, 2, 3, 4], index=index, columns=["value"]) # loc on empty multiindex == loc with False mask - empty_multiindex = df.loc[df.loc[:, 'value'] == 0, :].index + empty_multiindex = df.loc[df.loc[:, "value"] == 0, :].index result = df.loc[empty_multiindex, :] expected = df.loc[[False] * len(df.index), :] tm.assert_equal(result, expected) # replacing value with loc on empty multiindex - df.loc[df.loc[df.loc[:, 'value'] == 0].index, 'value'] = 5 + df.loc[df.loc[df.loc[:, "value"] == 0].index, "value"] = 5 result = df - expected = DataFrame([1, 2, 3, 4], index=index, columns=['value']) + expected = DataFrame([1, 2, 3, 4], index=index, columns=["value"]) tm.assert_equal(result, expected) From c1931f748e6d8780f6fea5873fc9c10244114366 Mon Sep 17 00:00:00 2001 From: Kasim Date: Mon, 28 Dec 2020 02:35:46 +0000 Subject: [PATCH 3/3] TST: Moved test and changed assertion method --- .../tests/indexing/multiindex/test_getitem.py | 19 +++++++++++++++++++ pandas/tests/indexing/multiindex/test_loc.py | 19 ------------------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/pandas/tests/indexing/multiindex/test_getitem.py b/pandas/tests/indexing/multiindex/test_getitem.py index 54b22dbc53466..144df1e28f8b6 100644 --- a/pandas/tests/indexing/multiindex/test_getitem.py +++ b/pandas/tests/indexing/multiindex/test_getitem.py @@ -260,3 +260,22 @@ def test_frame_mi_empty_slice(): index=[0, 1], columns=MultiIndex(levels=[[1], [2]], codes=[[], []]) ) tm.assert_frame_equal(result, expected) + + +def test_loc_empty_multiindex(): + # GH#36936 + arrays = [["a", "a", "b", "a"], ["a", "a", "b", "b"]] + index = MultiIndex.from_arrays(arrays, names=("idx1", "idx2")) + df = DataFrame([1, 2, 3, 4], index=index, columns=["value"]) + + # loc on empty multiindex == loc with False mask + empty_multiindex = df.loc[df.loc[:, "value"] == 0, :].index + result = df.loc[empty_multiindex, :] + expected = df.loc[[False] * len(df.index), :] + tm.assert_frame_equal(result, expected) + + # replacing value with loc on empty multiindex + df.loc[df.loc[df.loc[:, "value"] == 0].index, "value"] = 5 + result = df + expected = DataFrame([1, 2, 3, 4], index=index, columns=["value"]) + tm.assert_frame_equal(result, expected) diff --git a/pandas/tests/indexing/multiindex/test_loc.py b/pandas/tests/indexing/multiindex/test_loc.py index 6e8f14b03796a..42525fc575397 100644 --- a/pandas/tests/indexing/multiindex/test_loc.py +++ b/pandas/tests/indexing/multiindex/test_loc.py @@ -695,22 +695,3 @@ def test_loc_getitem_index_differently_ordered_slice_none(): columns=["a", "b"], ) tm.assert_frame_equal(result, expected) - - -def test_loc_empty_multiindex(): - # GH#36936 - arrays = [["a", "a", "b", "a"], ["a", "a", "b", "b"]] - index = MultiIndex.from_arrays(arrays, names=("idx1", "idx2")) - df = DataFrame([1, 2, 3, 4], index=index, columns=["value"]) - - # loc on empty multiindex == loc with False mask - empty_multiindex = df.loc[df.loc[:, "value"] == 0, :].index - result = df.loc[empty_multiindex, :] - expected = df.loc[[False] * len(df.index), :] - tm.assert_equal(result, expected) - - # replacing value with loc on empty multiindex - df.loc[df.loc[df.loc[:, "value"] == 0].index, "value"] = 5 - result = df - expected = DataFrame([1, 2, 3, 4], index=index, columns=["value"]) - tm.assert_equal(result, expected)