File tree 3 files changed +10
-2
lines changed
3 files changed +10
-2
lines changed Original file line number Diff line number Diff line change @@ -28,16 +28,22 @@ def setup(self):
28
28
index = MultiIndex .from_arrays ([level1 , level2 ])
29
29
self .s = Series (np .random .randn (N * K ), index = index )
30
30
self .s_subset = self .s [::2 ]
31
+ self .s_subset_no_cache = self .s [::2 ].copy ()
31
32
32
33
def time_reindex_dates (self ):
33
34
self .df .reindex (self .rng_subset )
34
35
35
36
def time_reindex_columns (self ):
36
37
self .df2 .reindex (columns = self .df .columns [1 :5 ])
37
38
38
- def time_reindex_multiindex (self ):
39
+ def time_reindex_multiindex_with_cache (self ):
40
+ # MultiIndex._values gets cached
39
41
self .s .reindex (self .s_subset .index )
40
42
43
+ def time_reindex_multiindex_no_cache (self ):
44
+ # Copy to avoid MultiIndex._values getting cached
45
+ self .s .reindex (self .s_subset_no_cache .index .copy ())
46
+
41
47
42
48
class ReindexMethod :
43
49
Original file line number Diff line number Diff line change @@ -298,6 +298,7 @@ Performance improvements
298
298
- Performance improvement in :meth: `MultiIndex.get_locs ` (:issue: `45681 `, :issue: `46040 `)
299
299
- Performance improvement in :func: `merge ` when left and/or right are empty (:issue: `45838 `)
300
300
- Performance improvement in :meth: `DataFrame.join ` when left and/or right are empty (:issue: `46015 `)
301
+ - Performance improvement in :meth: `DataFrame.reindex ` and :meth: `Series.reindex ` when target is a :class: `MultiIndex ` (:issue: `46235 `)
301
302
- Performance improvement in :func: `factorize ` (:issue: `46109 `)
302
303
- Performance improvement in :class: `DataFrame ` and :class: `Series ` constructors for extension dtype scalars (:issue: `45854 `)
303
304
Original file line number Diff line number Diff line change @@ -3922,14 +3922,15 @@ def _get_indexer(
3922
3922
elif method == "nearest" :
3923
3923
indexer = self ._get_nearest_indexer (target , limit , tolerance )
3924
3924
else :
3925
- tgt_values = target ._get_engine_target ()
3926
3925
if target ._is_multi and self ._is_multi :
3927
3926
engine = self ._engine
3928
3927
# error: Item "IndexEngine" of "Union[IndexEngine, ExtensionEngine]"
3929
3928
# has no attribute "_extract_level_codes"
3930
3929
tgt_values = engine ._extract_level_codes ( # type: ignore[union-attr]
3931
3930
target
3932
3931
)
3932
+ else :
3933
+ tgt_values = target ._get_engine_target ()
3933
3934
3934
3935
# error: Argument 1 to "get_indexer" of "IndexEngine" has incompatible
3935
3936
# type "Union[ExtensionArray, ndarray[Any, Any]]"; expected
You can’t perform that action at this time.
0 commit comments