Skip to content

Commit 1b2646a

Browse files
authored
BUG: merge with CategoricalIndex for left_on/right_on (#48464)
* BUG: merge with CategoricalIndex for left_on/right_on * GH refs
1 parent 047c11d commit 1b2646a

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

doc/source/whatsnew/v1.6.0.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ Groupby/resample/rolling
190190

191191
Reshaping
192192
^^^^^^^^^
193-
-
193+
- Bug in :func:`join` when ``left_on`` or ``right_on`` is or includes a :class:`CategoricalIndex` incorrectly raising ``AttributeError`` (:issue:`48464`)
194194
-
195195

196196
Sparse

pandas/core/reshape/merge.py

+3
Original file line numberDiff line numberDiff line change
@@ -1251,6 +1251,9 @@ def _maybe_coerce_merge_keys(self) -> None:
12511251
if (len(lk) and not len(rk)) or (not len(lk) and len(rk)):
12521252
continue
12531253

1254+
lk = extract_array(lk, extract_numpy=True)
1255+
rk = extract_array(rk, extract_numpy=True)
1256+
12541257
lk_is_cat = is_categorical_dtype(lk.dtype)
12551258
rk_is_cat = is_categorical_dtype(rk.dtype)
12561259
lk_is_object = is_object_dtype(lk.dtype)

pandas/tests/reshape/merge/test_merge.py

+12
Original file line numberDiff line numberDiff line change
@@ -2655,6 +2655,18 @@ def test_mergeerror_on_left_index_mismatched_dtypes():
26552655
merge(df_1, df_2, on=["C"], left_index=True)
26562656

26572657

2658+
def test_merge_on_left_categoricalindex():
2659+
# GH#48464 don't raise when left_on is a CategoricalIndex
2660+
ci = CategoricalIndex(range(3))
2661+
2662+
right = DataFrame({"A": ci, "B": range(3)})
2663+
left = DataFrame({"C": range(3, 6)})
2664+
2665+
res = merge(left, right, left_on=ci, right_on="A")
2666+
expected = merge(left, right, left_on=ci._data, right_on="A")
2667+
tm.assert_frame_equal(res, expected)
2668+
2669+
26582670
@pytest.mark.parametrize("dtype", [None, "Int64"])
26592671
def test_merge_outer_with_NaN(dtype):
26602672
# GH#43550

0 commit comments

Comments
 (0)