Skip to content

Commit 29edd11

Browse files
TomAugspurgerjreback
authored andcommitted
BUG: Break reference from grouping level to MI (#31133)
1 parent f1aaf62 commit 29edd11

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

pandas/core/indexes/multi.py

+4
Original file line numberDiff line numberDiff line change
@@ -1256,6 +1256,10 @@ def _get_grouper_for_level(self, mapper, level):
12561256
if len(uniques) < len(level_index):
12571257
# Remove unobserved levels from level_index
12581258
level_index = level_index.take(uniques)
1259+
else:
1260+
# break references back to us so that setting the name
1261+
# on the output of a groupby doesn't reflect back here.
1262+
level_index = level_index.copy()
12591263

12601264
if len(level_index):
12611265
grouper = level_index.take(codes)

pandas/tests/groupby/test_apply.py

+17
Original file line numberDiff line numberDiff line change
@@ -775,3 +775,20 @@ def most_common_values(df):
775775
["17661101"], index=pd.DatetimeIndex(["2015-02-24"], name="day"), name="userId"
776776
)
777777
tm.assert_series_equal(result, expected)
778+
779+
780+
@pytest.mark.parametrize("category", [False, True])
781+
def test_apply_multi_level_name(category):
782+
# https://github.com/pandas-dev/pandas/issues/31068
783+
b = [1, 2] * 5
784+
if category:
785+
b = pd.Categorical(b, categories=[1, 2, 3])
786+
df = pd.DataFrame(
787+
{"A": np.arange(10), "B": b, "C": list(range(10)), "D": list(range(10))}
788+
).set_index(["A", "B"])
789+
result = df.groupby("B").apply(lambda x: x.sum())
790+
expected = pd.DataFrame(
791+
{"C": [20, 25], "D": [20, 25]}, index=pd.Index([1, 2], name="B")
792+
)
793+
tm.assert_frame_equal(result, expected)
794+
assert df.index.names == ["A", "B"]

0 commit comments

Comments
 (0)