@@ -2476,51 +2476,7 @@ def sortlevel(
2476
2476
2477
2477
return new_index , indexer
2478
2478
2479
- def reindex (
2480
- self , target , method = None , level = None , limit = None , tolerance = None
2481
- ) -> tuple [MultiIndex , np .ndarray | None ]:
2482
- """
2483
- Create index with target's values (move/add/delete values as necessary)
2484
-
2485
- Returns
2486
- -------
2487
- new_index : pd.MultiIndex
2488
- Resulting index
2489
- indexer : np.ndarray[np.intp] or None
2490
- Indices of output values in original index.
2491
-
2492
- """
2493
- # GH6552: preserve names when reindexing to non-named target
2494
- # (i.e. neither Index nor Series).
2495
- preserve_names = not hasattr (target , "names" )
2496
-
2497
- if level is not None :
2498
- if method is not None :
2499
- raise TypeError ("Fill method not supported if level passed" )
2500
-
2501
- # GH7774: preserve dtype/tz if target is empty and not an Index.
2502
- # target may be an iterator
2503
- target = ibase .ensure_has_len (target )
2504
- if len (target ) == 0 and not isinstance (target , Index ):
2505
- idx = self .levels [level ]
2506
- target = idx [:0 ]
2507
- else :
2508
- target = ensure_index (target )
2509
- target , indexer , _ = self ._join_level (
2510
- target , level , how = "right" , keep_order = False
2511
- )
2512
- else :
2513
- target = ensure_index (target )
2514
- if self .equals (target ):
2515
- indexer = None
2516
- else :
2517
- if self .is_unique :
2518
- indexer = self .get_indexer (
2519
- target , method = method , limit = limit , tolerance = tolerance
2520
- )
2521
- else :
2522
- raise ValueError ("cannot handle a non-unique multi-index!" )
2523
-
2479
+ def _wrap_reindex_result (self , target , indexer , preserve_names : bool ):
2524
2480
if not isinstance (target , MultiIndex ):
2525
2481
if indexer is None :
2526
2482
target = self
@@ -2531,16 +2487,20 @@ def reindex(
2531
2487
target = MultiIndex .from_tuples (target )
2532
2488
except TypeError :
2533
2489
# not all tuples, see test_constructor_dict_multiindex_reindex_flat
2534
- return target , indexer
2490
+ return target
2491
+
2492
+ target = self ._maybe_preserve_names (target , preserve_names )
2493
+ return target
2494
+
2495
+ def _maybe_preserve_names (self , target : Index , preserve_names : bool ):
2535
2496
if (
2536
2497
preserve_names
2537
2498
and target .nlevels == self .nlevels
2538
2499
and target .names != self .names
2539
2500
):
2540
2501
target = target .copy (deep = False )
2541
2502
target .names = self .names
2542
-
2543
- return target , indexer
2503
+ return target
2544
2504
2545
2505
# --------------------------------------------------------------------
2546
2506
# Indexing Methods
0 commit comments