From 2ab3b074f9320c4961e7a33003b244105eed3443 Mon Sep 17 00:00:00 2001 From: wdyy20041223 <2795352227@qq,com> Date: Fri, 7 Nov 2025 22:38:04 +0800 Subject: [PATCH 1/5] TST: Add regression tests for enlarging MultiIndex with None keys (GH#59153) --- .../tests/indexing/multiindex/test_setitem.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/pandas/tests/indexing/multiindex/test_setitem.py b/pandas/tests/indexing/multiindex/test_setitem.py index d732cb4d7fbbc..a02f33762bde0 100644 --- a/pandas/tests/indexing/multiindex/test_setitem.py +++ b/pandas/tests/indexing/multiindex/test_setitem.py @@ -533,3 +533,24 @@ def test_frame_setitem_partial_multiindex(): expected = df.copy() expected["d"] = 8 tm.assert_frame_equal(result, expected) + +def test_setitem_enlargement_multiindex_with_none(self): + # GH#59153 + # test enlarge a DataFrame with a MultiIndex + index = MultiIndex.from_tuples( + [("A", "a1"), ("A", "a2"), ("B", "b1"), ("B", None)] + ) + df = DataFrame([(0.0, 6.0), (1.0, 5.0), (2.0, 4.0), (3.0, 7.0)], index=index) + df.loc[("A", None), :] = [12.0, 13.0] + expected_index = MultiIndex.from_tuples( + [("A", "a1"), ("A", "a2"), ("B", "b1"), ("B", None), ("A", None)] + ) + expected = DataFrame( + [[0.0, 6.0], [1.0, 5.0], [2.0, 4.0], [3.0, 7.0], [12.0, 13.0]], + index=expected_index, + columns=[0, 1], + ) + tm.assert_frame_equal(df, expected, check_index_type=False) + result = df.loc[("A", None), :] + expected_row = Series([12.0, 13.0], index=[0, 1], name=("A", np.nan)) + tm.assert_series_equal(result, expected_row) \ No newline at end of file From f4516177a871e6d207411b04afc104853b94f0ae Mon Sep 17 00:00:00 2001 From: wdyy20041223 <2795352227@qq,com> Date: Fri, 7 Nov 2025 23:01:26 +0800 Subject: [PATCH 2/5] TST: Add regression tests for enlarging MultiIndex with None keys (GH#59153) --- .../tests/indexing/multiindex/test_setitem.py | 41 ++++++++++--------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/pandas/tests/indexing/multiindex/test_setitem.py b/pandas/tests/indexing/multiindex/test_setitem.py index a02f33762bde0..8b55fdfe0c645 100644 --- a/pandas/tests/indexing/multiindex/test_setitem.py +++ b/pandas/tests/indexing/multiindex/test_setitem.py @@ -490,6 +490,27 @@ def test_setitem_enlargement_keep_index_names(self): ) tm.assert_frame_equal(df, expected) + def test_setitem_enlargement_multiindex_with_none(self): + # GH#59153 + # enlarging a DataFrame with a MultiIndex containing None values + index = MultiIndex.from_tuples( + [("A", "a1"), ("A", "a2"), ("B", "b1"), ("B", None)] + ) + df = DataFrame([(0.0, 6.0), (1.0, 5.0), (2.0, 4.0), (3.0, 7.0)], index=index) + df.loc[("A", None), :] = [12.0, 13.0] + expected_index = MultiIndex.from_tuples( + [("A", "a1"), ("A", "a2"), ("B", "b1"), ("B", None), ("A", None)] + ) + expected = DataFrame( + [[0.0, 6.0], [1.0, 5.0], [2.0, 4.0], [3.0, 7.0], [12.0, 13.0]], + index=expected_index, + columns=[0, 1], + ) + tm.assert_frame_equal(df, expected, check_index_type=False) + result = df.loc[("A", None), :] + expected_row = Series([12.0, 13.0], index=[0, 1], name=("A", np.nan)) + tm.assert_series_equal(result, expected_row) + def test_frame_setitem_view_direct(multiindex_dataframe_random_data): # this works because we are modifying the underlying array @@ -534,23 +555,3 @@ def test_frame_setitem_partial_multiindex(): expected["d"] = 8 tm.assert_frame_equal(result, expected) -def test_setitem_enlargement_multiindex_with_none(self): - # GH#59153 - # test enlarge a DataFrame with a MultiIndex - index = MultiIndex.from_tuples( - [("A", "a1"), ("A", "a2"), ("B", "b1"), ("B", None)] - ) - df = DataFrame([(0.0, 6.0), (1.0, 5.0), (2.0, 4.0), (3.0, 7.0)], index=index) - df.loc[("A", None), :] = [12.0, 13.0] - expected_index = MultiIndex.from_tuples( - [("A", "a1"), ("A", "a2"), ("B", "b1"), ("B", None), ("A", None)] - ) - expected = DataFrame( - [[0.0, 6.0], [1.0, 5.0], [2.0, 4.0], [3.0, 7.0], [12.0, 13.0]], - index=expected_index, - columns=[0, 1], - ) - tm.assert_frame_equal(df, expected, check_index_type=False) - result = df.loc[("A", None), :] - expected_row = Series([12.0, 13.0], index=[0, 1], name=("A", np.nan)) - tm.assert_series_equal(result, expected_row) \ No newline at end of file From 886350d39139bb8ae1707137a2f0195d566ec556 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 7 Nov 2025 15:26:38 +0000 Subject: [PATCH 3/5] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- pandas/tests/indexing/multiindex/test_setitem.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pandas/tests/indexing/multiindex/test_setitem.py b/pandas/tests/indexing/multiindex/test_setitem.py index 8b55fdfe0c645..419ae9d68134d 100644 --- a/pandas/tests/indexing/multiindex/test_setitem.py +++ b/pandas/tests/indexing/multiindex/test_setitem.py @@ -554,4 +554,3 @@ def test_frame_setitem_partial_multiindex(): expected = df.copy() expected["d"] = 8 tm.assert_frame_equal(result, expected) - From d2e43a314beab7152c521585b7a6047cc253a904 Mon Sep 17 00:00:00 2001 From: wdyy20041223 <2795352227@qq,com> Date: Sat, 8 Nov 2025 01:29:28 +0800 Subject: [PATCH 4/5] TST: Add regression tests for enlarging MultiIndex with None keys (GH#59153) --- pandas/tests/indexing/multiindex/test_setitem.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pandas/tests/indexing/multiindex/test_setitem.py b/pandas/tests/indexing/multiindex/test_setitem.py index 8b55fdfe0c645..6325e4de0ffce 100644 --- a/pandas/tests/indexing/multiindex/test_setitem.py +++ b/pandas/tests/indexing/multiindex/test_setitem.py @@ -507,10 +507,6 @@ def test_setitem_enlargement_multiindex_with_none(self): columns=[0, 1], ) tm.assert_frame_equal(df, expected, check_index_type=False) - result = df.loc[("A", None), :] - expected_row = Series([12.0, 13.0], index=[0, 1], name=("A", np.nan)) - tm.assert_series_equal(result, expected_row) - def test_frame_setitem_view_direct(multiindex_dataframe_random_data): # this works because we are modifying the underlying array From b33b98c1fa3e76451cda2921446a840f993bbb62 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 7 Nov 2025 17:35:38 +0000 Subject: [PATCH 5/5] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- pandas/tests/indexing/multiindex/test_setitem.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pandas/tests/indexing/multiindex/test_setitem.py b/pandas/tests/indexing/multiindex/test_setitem.py index 1a3ee6be0c236..615a0eb6e1af1 100644 --- a/pandas/tests/indexing/multiindex/test_setitem.py +++ b/pandas/tests/indexing/multiindex/test_setitem.py @@ -508,6 +508,7 @@ def test_setitem_enlargement_multiindex_with_none(self): ) tm.assert_frame_equal(df, expected, check_index_type=False) + def test_frame_setitem_view_direct(multiindex_dataframe_random_data): # this works because we are modifying the underlying array # really a no-no