Skip to content

Commit 248177b

Browse files
author
Jiang Yue
committed
vectorise reassignment of na codes
1 parent af2ad91 commit 248177b

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

pandas/core/indexes/multi.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,8 @@ def __new__(cls, levels=None, codes=None, sortorder=None, names=None,
244244
if verify_integrity:
245245
result._verify_integrity()
246246

247-
codes = [cls._reassign_na_codes(*it) for it in zip(levels, codes)]
247+
codes = [cls._reassign_na_codes(level, code)
248+
for level, code in zip(levels, codes)]
248249
result._set_codes(codes, validate=False)
249250

250251
if _set_identity:
@@ -254,7 +255,10 @@ def __new__(cls, levels=None, codes=None, sortorder=None, names=None,
254255

255256
@classmethod
256257
def _reassign_na_codes(cls, level, code):
257-
return [-1 if x == -1 or isna(level[x]) else x for x in code]
258+
null_mask = isna(level)
259+
if np.any(null_mask):
260+
code = np.where((code == -1) | null_mask[code], -1, code)
261+
return code
258262

259263
def _verify_integrity(self, codes=None, levels=None):
260264
"""

0 commit comments

Comments
 (0)