Skip to content

Commit f3b4758

Browse files
jbrockmendelJulianWgs
authored andcommitted
BUG: MultiIndex.reindex with level and EA dtype (pandas-dev#42043)
1 parent 56c9e03 commit f3b4758

File tree

3 files changed

+9
-4
lines changed

3 files changed

+9
-4
lines changed

doc/source/whatsnew/v1.4.0.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ Missing
167167

168168
MultiIndex
169169
^^^^^^^^^^
170-
-
170+
- Bug in :meth:`MultiIndex.reindex` when passing a ``level`` that corresponds to an ``ExtensionDtype`` level (:issue:`42043`)
171171
-
172172

173173
I/O

pandas/core/indexes/multi.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -2503,9 +2503,7 @@ def reindex(
25032503
target = ibase.ensure_has_len(target)
25042504
if len(target) == 0 and not isinstance(target, Index):
25052505
idx = self.levels[level]
2506-
attrs = idx._get_attributes_dict()
2507-
attrs.pop("freq", None) # don't preserve freq
2508-
target = type(idx)._simple_new(np.empty(0, dtype=idx.dtype), **attrs)
2506+
target = idx[:0]
25092507
else:
25102508
target = ensure_index(target)
25112509
target, indexer, _ = self._join_level(

pandas/tests/indexes/multi/test_reindex.py

+7
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,13 @@ def test_reindex_lvl_preserves_type_if_target_is_empty_list_or_array():
8484
assert idx.reindex([], level=0)[0].levels[0].dtype.type == np.int64
8585
assert idx.reindex([], level=1)[0].levels[1].dtype.type == np.object_
8686

87+
# case with EA levels
88+
cat = pd.Categorical(["foo", "bar"])
89+
dti = pd.date_range("2016-01-01", periods=2, tz="US/Pacific")
90+
mi = MultiIndex.from_product([cat, dti])
91+
assert mi.reindex([], level=0)[0].levels[0].dtype == cat.dtype
92+
assert mi.reindex([], level=1)[0].levels[1].dtype == dti.dtype
93+
8794

8895
def test_reindex_base(idx):
8996
idx = idx

0 commit comments

Comments
 (0)