From 27c5bfd812512cbcd69122542a250a651e854019 Mon Sep 17 00:00:00 2001 From: Patrick Hoefler <61934744+phofl@users.noreply.github.com> Date: Fri, 24 Feb 2023 18:54:47 +0000 Subject: [PATCH] Backport PR #51605: REGR: MultiIndex.isin with empty iterable raising --- pandas/core/indexes/multi.py | 2 ++ pandas/tests/indexes/multi/test_isin.py | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/pandas/core/indexes/multi.py b/pandas/core/indexes/multi.py index 92cb7b5fd5f47..b381752818ba0 100644 --- a/pandas/core/indexes/multi.py +++ b/pandas/core/indexes/multi.py @@ -3748,6 +3748,8 @@ def delete(self, loc) -> MultiIndex: @doc(Index.isin) def isin(self, values, level=None) -> npt.NDArray[np.bool_]: if level is None: + if len(values) == 0: + return np.zeros((len(self),), dtype=np.bool_) if not isinstance(values, MultiIndex): values = MultiIndex.from_tuples(values) return values.unique().get_indexer_for(self) != -1 diff --git a/pandas/tests/indexes/multi/test_isin.py b/pandas/tests/indexes/multi/test_isin.py index bf003019d5387..2723e7e4db8eb 100644 --- a/pandas/tests/indexes/multi/test_isin.py +++ b/pandas/tests/indexes/multi/test_isin.py @@ -85,3 +85,11 @@ def test_isin_multi_index_with_missing_value(labels, expected, level): midx = MultiIndex.from_arrays([[np.nan, "a", "b"], ["c", "d", np.nan]]) result = midx.isin(labels, level=level) tm.assert_numpy_array_equal(result, expected) + + +def test_isin_empty(): + # GH#51599 + midx = MultiIndex.from_arrays([[1, 2], [3, 4]]) + result = midx.isin([]) + expected = np.array([False, False]) + tm.assert_numpy_array_equal(result, expected)