Skip to content

Commit 7688d52

Browse files
authored
REGR: MultiIndex.append raising for overlapping IntervalIndex levels (#54945)
1 parent 1e72b2b commit 7688d52

File tree

3 files changed

+24
-1
lines changed

3 files changed

+24
-1
lines changed

doc/source/whatsnew/v2.1.1.rst

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Fixed regressions
1818
- Fixed regression in :func:`read_csv` when ``delim_whitespace`` is True (:issue:`54918`, :issue:`54931`)
1919
- Fixed regression in :meth:`.GroupBy.get_group` raising for ``axis=1`` (:issue:`54858`)
2020
- Fixed regression in :meth:`DataFrame.__setitem__` raising ``AssertionError`` when setting a :class:`Series` with a partial :class:`MultiIndex` (:issue:`54875`)
21+
- Fixed regression in :meth:`MultiIndex.append` raising when appending overlapping :class:`IntervalIndex` levels (:issue:`54934`)
2122
- Fixed regression in :meth:`Series.drop_duplicates` for PyArrow strings (:issue:`54904`)
2223
- Fixed regression in :meth:`Series.value_counts` raising for numeric data if ``bins`` was specified (:issue:`54857`)
2324
- Fixed regression when comparing a :class:`Series` with ``datetime64`` dtype with ``None`` (:issue:`54870`)

pandas/core/arrays/categorical.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2948,7 +2948,7 @@ def recode_for_categories(
29482948
return codes
29492949

29502950
indexer = coerce_indexer_dtype(
2951-
new_categories.get_indexer(old_categories), new_categories
2951+
new_categories.get_indexer_for(old_categories), new_categories
29522952
)
29532953
new_codes = take_nd(indexer, codes, fill_value=-1)
29542954
return new_codes

pandas/tests/indexes/multi/test_reshape.py

+22
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,28 @@ def test_append_names_dont_match():
169169
tm.assert_index_equal(result, expected)
170170

171171

172+
def test_append_overlapping_interval_levels():
173+
# GH 54934
174+
ivl1 = pd.IntervalIndex.from_breaks([0.0, 1.0, 2.0])
175+
ivl2 = pd.IntervalIndex.from_breaks([0.5, 1.5, 2.5])
176+
mi1 = MultiIndex.from_product([ivl1, ivl1])
177+
mi2 = MultiIndex.from_product([ivl2, ivl2])
178+
result = mi1.append(mi2)
179+
expected = MultiIndex.from_tuples(
180+
[
181+
(pd.Interval(0.0, 1.0), pd.Interval(0.0, 1.0)),
182+
(pd.Interval(0.0, 1.0), pd.Interval(1.0, 2.0)),
183+
(pd.Interval(1.0, 2.0), pd.Interval(0.0, 1.0)),
184+
(pd.Interval(1.0, 2.0), pd.Interval(1.0, 2.0)),
185+
(pd.Interval(0.5, 1.5), pd.Interval(0.5, 1.5)),
186+
(pd.Interval(0.5, 1.5), pd.Interval(1.5, 2.5)),
187+
(pd.Interval(1.5, 2.5), pd.Interval(0.5, 1.5)),
188+
(pd.Interval(1.5, 2.5), pd.Interval(1.5, 2.5)),
189+
]
190+
)
191+
tm.assert_index_equal(result, expected)
192+
193+
172194
def test_repeat():
173195
reps = 2
174196
numbers = [1, 2, 3]

0 commit comments

Comments
 (0)