Skip to content

Commit 0419f74

Browse files
committed
BUG: Break reference from grouping level to MI
Closes pandas-dev#31068
1 parent a0c7a8a commit 0419f74

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

pandas/core/indexes/multi.py

+3
Original file line numberDiff line numberDiff line change
@@ -1235,6 +1235,9 @@ def _set_names(self, names, level=None, validate=True):
12351235
def _get_grouper_for_level(self, mapper, level):
12361236
indexer = self.codes[level]
12371237
level_index = self.levels[level]
1238+
# break references back to ourself so that setting the name
1239+
# on the output of a groupby doesn't reflect back here.
1240+
level_index = level_index.copy()
12381241

12391242
if mapper is not None:
12401243
# Handle group mapping function and return

pandas/tests/groupby/test_apply.py

+18
Original file line numberDiff line numberDiff line change
@@ -752,3 +752,21 @@ def most_common_values(df):
752752
["17661101"], index=pd.DatetimeIndex(["2015-02-24"], name="day"), name="userId"
753753
)
754754
tm.assert_series_equal(result, expected)
755+
756+
757+
def test_apply_multi_level_name():
758+
# https://github.com/pandas-dev/pandas/issues/31068
759+
df = pd.DataFrame(
760+
{
761+
"A": np.arange(10),
762+
"B": [1, 2] * 5,
763+
"C": list(range(10)),
764+
"D": list(range(10)),
765+
}
766+
).set_index(["A", "B"])
767+
result = df.groupby("B").apply(lambda x: x.sum())
768+
expected = pd.DataFrame(
769+
{"C": [20, 25], "D": [20, 25]}, index=pd.Index([1, 2], name="B")
770+
)
771+
tm.assert_frame_equal(result, expected)
772+
assert df.index.names == ["A", "B"]

0 commit comments

Comments
 (0)