@@ -264,10 +264,14 @@ def _simple_new(cls, values, name=None, dtype=None):
264
264
# --------------------------------------------------------------------
265
265
266
266
@Appender (Index ._shallow_copy .__doc__ )
267
- def _shallow_copy (self , values = None , dtype = None , ** kwargs ):
268
- if dtype is None :
269
- dtype = self .dtype
270
- return super ()._shallow_copy (values = values , dtype = dtype , ** kwargs )
267
+ def _shallow_copy (self , values = None , ** kwargs ):
268
+ if values is None :
269
+ values = self .values
270
+
271
+ cat = Categorical (values , dtype = self .dtype )
272
+
273
+ name = kwargs .get ("name" , self .name )
274
+ return type (self )._simple_new (cat , name = name )
271
275
272
276
def _is_dtype_compat (self , other ) -> bool :
273
277
"""
@@ -422,9 +426,9 @@ def unique(self, level=None):
422
426
if level is not None :
423
427
self ._validate_index_level (level )
424
428
result = self .values .unique ()
425
- # CategoricalIndex. _shallow_copy keeps original dtype
426
- # if not otherwise specified
427
- return self . _shallow_copy (result , dtype = result . dtype )
429
+ # Use _simple_new instead of _shallow_copy to ensure we keep dtype
430
+ # of result, not self.
431
+ return type ( self ). _simple_new (result , name = self . name )
428
432
429
433
@Appender (Index .duplicated .__doc__ )
430
434
def duplicated (self , keep = "first" ):
@@ -450,7 +454,7 @@ def where(self, cond, other=None):
450
454
other = self ._na_value
451
455
values = np .where (cond , self .values , other )
452
456
cat = Categorical (values , dtype = self .dtype )
453
- return self ._shallow_copy (cat , ** self . _get_attributes_dict () )
457
+ return self ._shallow_copy (cat )
454
458
455
459
def reindex (self , target , method = None , level = None , limit = None , tolerance = None ):
456
460
"""
0 commit comments