From 39cc530fcd95d3a76cf5d8b5f06e4ac19ceec8f7 Mon Sep 17 00:00:00 2001 From: tp Date: Sun, 29 Mar 2020 23:27:08 +0100 Subject: [PATCH 1/2] BUG: create from a MultiIndex._get_level_values --- pandas/core/indexes/period.py | 4 ++-- .../tests/indexes/multi/test_get_level_values.py | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/pandas/core/indexes/period.py b/pandas/core/indexes/period.py index 68d7e8dd384f0..c638c59909488 100644 --- a/pandas/core/indexes/period.py +++ b/pandas/core/indexes/period.py @@ -323,8 +323,8 @@ def _formatter_func(self): @cache_readonly def _engine(self): - # To avoid a reference cycle, pass a weakref of self to _engine_type. - period = weakref.ref(self) + # To avoid a reference cycle, pass a weakref of self._values to _engine_type. + period = weakref.ref(self._values) return self._engine_type(period, len(self)) @doc(Index.__contains__) diff --git a/pandas/tests/indexes/multi/test_get_level_values.py b/pandas/tests/indexes/multi/test_get_level_values.py index 1215e72be3c59..554c34f67e299 100644 --- a/pandas/tests/indexes/multi/test_get_level_values.py +++ b/pandas/tests/indexes/multi/test_get_level_values.py @@ -89,3 +89,17 @@ def test_get_level_values_na(): result = index.get_level_values(0) expected = pd.Index([], dtype=object) tm.assert_index_equal(result, expected) + + +def test_get_level_values_when_periods(): + # GH33131. See also discussion in GH32669. + # This test can probably be removed when PeriodIndex._engine is removed. + from pandas import Period, PeriodIndex + + idx = MultiIndex.from_arrays( + [PeriodIndex([Period("2019Q1"), Period("2019Q2")], name="b")] + ) + idx2 = MultiIndex.from_arrays( + [idx._get_level_values(level) for level in range(idx.nlevels)] + ) + assert all(x.is_monotonic for x in idx2.levels) is True From 259d4b04a2969c3beb14a995a8c8d94cf8e2f16b Mon Sep 17 00:00:00 2001 From: tp Date: Mon, 30 Mar 2020 14:56:30 +0100 Subject: [PATCH 2/2] Remove redundant check --- pandas/tests/indexes/multi/test_get_level_values.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/indexes/multi/test_get_level_values.py b/pandas/tests/indexes/multi/test_get_level_values.py index 554c34f67e299..985fe5773ceed 100644 --- a/pandas/tests/indexes/multi/test_get_level_values.py +++ b/pandas/tests/indexes/multi/test_get_level_values.py @@ -102,4 +102,4 @@ def test_get_level_values_when_periods(): idx2 = MultiIndex.from_arrays( [idx._get_level_values(level) for level in range(idx.nlevels)] ) - assert all(x.is_monotonic for x in idx2.levels) is True + assert all(x.is_monotonic for x in idx2.levels)