From 831f5fb55cc8a68118bd536dcc22b1da2ed2ad5a Mon Sep 17 00:00:00 2001 From: phofl Date: Sat, 14 Nov 2020 14:05:58 +0100 Subject: [PATCH 1/3] Return view for xs when droplevel=False with regular Index --- pandas/core/generic.py | 2 +- pandas/tests/frame/indexing/test_xs.py | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 49e992b14293e..bcb46ad6d1873 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -3751,7 +3751,7 @@ class animal locomotion dtype=new_values.dtype, ) elif is_scalar(loc): - result = self.iloc[:, [loc]] + result = self.iloc[:, slice(loc, loc + 1)] elif axis == 1: result = self.iloc[:, loc] else: diff --git a/pandas/tests/frame/indexing/test_xs.py b/pandas/tests/frame/indexing/test_xs.py index a90141e9fad60..b0cf26f7a893d 100644 --- a/pandas/tests/frame/indexing/test_xs.py +++ b/pandas/tests/frame/indexing/test_xs.py @@ -319,3 +319,10 @@ def test_xs_droplevel_false(self): result = df.xs("a", axis=1, drop_level=False) expected = DataFrame({"a": [1]}) tm.assert_frame_equal(result, expected) + + def test_xs_droplevel_false_view(self): + df = DataFrame([[1, 2, 3]], columns=Index(["a", "b", "c"])) + result = df.xs("a", axis=1, drop_level=False) + df["a"] = 2 + expected = DataFrame({"a": [2]}) + tm.assert_frame_equal(result, expected) From 284701f85d86c27038f733314d1b73f53e793066 Mon Sep 17 00:00:00 2001 From: phofl Date: Sat, 14 Nov 2020 14:07:40 +0100 Subject: [PATCH 2/3] Add pr number --- pandas/tests/frame/indexing/test_xs.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pandas/tests/frame/indexing/test_xs.py b/pandas/tests/frame/indexing/test_xs.py index b0cf26f7a893d..adc5822a15348 100644 --- a/pandas/tests/frame/indexing/test_xs.py +++ b/pandas/tests/frame/indexing/test_xs.py @@ -321,6 +321,7 @@ def test_xs_droplevel_false(self): tm.assert_frame_equal(result, expected) def test_xs_droplevel_false_view(self): + # GH#37832 df = DataFrame([[1, 2, 3]], columns=Index(["a", "b", "c"])) result = df.xs("a", axis=1, drop_level=False) df["a"] = 2 From a261231d27ec2e32d153781f6b84c127d8b80f4b Mon Sep 17 00:00:00 2001 From: phofl Date: Sat, 14 Nov 2020 20:33:29 +0100 Subject: [PATCH 3/3] Change value assignment --- pandas/tests/frame/indexing/test_xs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/frame/indexing/test_xs.py b/pandas/tests/frame/indexing/test_xs.py index adc5822a15348..3be3ce15622b4 100644 --- a/pandas/tests/frame/indexing/test_xs.py +++ b/pandas/tests/frame/indexing/test_xs.py @@ -324,6 +324,6 @@ def test_xs_droplevel_false_view(self): # GH#37832 df = DataFrame([[1, 2, 3]], columns=Index(["a", "b", "c"])) result = df.xs("a", axis=1, drop_level=False) - df["a"] = 2 + df.values[0, 0] = 2 expected = DataFrame({"a": [2]}) tm.assert_frame_equal(result, expected)