Skip to content

Commit f10ec59

Browse files
authored
BUG: create new MI from MultiIndex._get_level_values (#33134)
1 parent a7dd3ea commit f10ec59

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

pandas/core/indexes/period.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -324,8 +324,8 @@ def _formatter_func(self):
324324

325325
@cache_readonly
326326
def _engine(self):
327-
# To avoid a reference cycle, pass a weakref of self to _engine_type.
328-
period = weakref.ref(self)
327+
# To avoid a reference cycle, pass a weakref of self._values to _engine_type.
328+
period = weakref.ref(self._values)
329329
return self._engine_type(period, len(self))
330330

331331
@doc(Index.__contains__)

pandas/tests/indexes/multi/test_get_level_values.py

+14
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,17 @@ def test_get_level_values_na():
8989
result = index.get_level_values(0)
9090
expected = pd.Index([], dtype=object)
9191
tm.assert_index_equal(result, expected)
92+
93+
94+
def test_get_level_values_when_periods():
95+
# GH33131. See also discussion in GH32669.
96+
# This test can probably be removed when PeriodIndex._engine is removed.
97+
from pandas import Period, PeriodIndex
98+
99+
idx = MultiIndex.from_arrays(
100+
[PeriodIndex([Period("2019Q1"), Period("2019Q2")], name="b")]
101+
)
102+
idx2 = MultiIndex.from_arrays(
103+
[idx._get_level_values(level) for level in range(idx.nlevels)]
104+
)
105+
assert all(x.is_monotonic for x in idx2.levels)

0 commit comments

Comments
 (0)