From b4755e4fdb940f11f6aa22c1c722c1602c8e6b03 Mon Sep 17 00:00:00 2001 From: MarcoGorelli <33491632+MarcoGorelli@users.noreply.github.com> Date: Wed, 8 Nov 2023 21:52:09 +0000 Subject: [PATCH] set full column if using self.index in loc --- pandas/core/indexing.py | 3 +++ pandas/tests/frame/indexing/test_setitem.py | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 13756dd5a70e4..8a9880354a24a 100644 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -1454,6 +1454,9 @@ def _convert_to_indexer(self, key, axis: AxisInt): if isinstance(key, slice): return labels._convert_slice_indexer(key, kind="loc") + if key is self.obj.index: + return slice(None, None, None) + if ( isinstance(key, tuple) and not isinstance(labels, MultiIndex) diff --git a/pandas/tests/frame/indexing/test_setitem.py b/pandas/tests/frame/indexing/test_setitem.py index 49dd7a3c4df9b..9f79fa3c59caa 100644 --- a/pandas/tests/frame/indexing/test_setitem.py +++ b/pandas/tests/frame/indexing/test_setitem.py @@ -1351,3 +1351,11 @@ def test_frame_setitem_empty_dataframe(self): index=Index([], dtype="datetime64[ns]", name="date"), ) tm.assert_frame_equal(df, expected) + + def test_setitem_frame_with_dataframes_own_index(self): + # https://github.com/pandas-dev/pandas/issues/55791 + df1 = DataFrame({"a": [1]}) + df2 = DataFrame({"d": [True]}) + df1.loc[df1.index, df2.columns] = df2 + expected = DataFrame({"a": [1], "d": [True]}) + tm.assert_frame_equal(df1, expected)