Skip to content

Commit 0e16bf3

Browse files
avoid reindex with empty multi-index
1 parent e209a35 commit 0e16bf3

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

pandas/core/frame.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4450,6 +4450,11 @@ def _set_item_frame_value(self, key, value: DataFrame) -> None:
44504450
loc, (slice, Series, np.ndarray, Index)
44514451
):
44524452
cols_droplevel = maybe_droplevels(cols, key)
4453+
if (
4454+
not isinstance(cols_droplevel, MultiIndex)
4455+
and not cols_droplevel.any()
4456+
):
4457+
return
44534458
if len(cols_droplevel) and not cols_droplevel.equals(value.columns):
44544459
value = value.reindex(cols_droplevel, axis=1)
44554460

pandas/tests/indexing/multiindex/test_multiindex.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,3 +249,20 @@ def test_groupyby_rename_categories_operation_with_multiindex(self, operation):
249249
expected = getattr(a, operation)(b.sort_index(ascending=False))
250250

251251
tm.assert_series_equal(result, expected)
252+
253+
def test_multiindex_assign_aligns_as_implicit_tuple(self):
254+
# GH 61841
255+
cols = MultiIndex.from_tuples([("A", "B")])
256+
df1 = DataFrame([[i] for i in range(3)], columns=cols)
257+
df2 = DataFrame([[i] for i in range(3)], columns=cols)
258+
df3 = DataFrame([[i] for i in range(3)], columns=cols)
259+
s1 = df1["A"].rolling(2).mean()
260+
s2 = df2["A"].rolling(2).mean()
261+
s3 = df3["A"].rolling(2).mean()
262+
df1["C"] = s1
263+
df1["C"] = s1
264+
df1["C"] = s1
265+
df2["C"] = s2
266+
df3[("C", "")] = s3
267+
tm.assert_frame_equal(df1, df2)
268+
tm.assert_frame_equal(df1, df3)

0 commit comments

Comments
 (0)