@@ -293,13 +293,10 @@ def __init__(self, values, categories=None, ordered=None, dtype=None,
293
293
294
294
# sanitize input
295
295
if is_categorical_dtype (values ):
296
- values = values .get_values ()
297
-
298
- elif isinstance (values , (ABCIndexClass , ABCSeries )):
299
- # we'll do inference later
300
- pass
296
+ if dtype .categories is None :
297
+ dtype = CategoricalDtype (values .categories , dtype .ordered )
301
298
302
- else :
299
+ elif not isinstance ( values , ( ABCIndexClass , ABCSeries )) :
303
300
304
301
# on numpy < 1.6 datetimelike get inferred to all i8 by
305
302
# _sanitize_array which is fine, but since factorize does this
@@ -337,9 +334,14 @@ def __init__(self, values, categories=None, ordered=None, dtype=None,
337
334
raise NotImplementedError ("> 1 ndim Categorical are not "
338
335
"supported at this time" )
339
336
340
- if dtype .categories is None :
341
- # we're inferring from values
342
- dtype = CategoricalDtype (categories , dtype .ordered )
337
+ # we're inferring from values
338
+ dtype = CategoricalDtype (categories , dtype .ordered )
339
+
340
+ elif is_categorical_dtype (values ):
341
+ old_codes = (values .cat .codes if isinstance (values , ABCSeries )
342
+ else values .codes )
343
+ codes = _recode_for_categories (old_codes , values .dtype .categories ,
344
+ dtype .categories )
343
345
344
346
else :
345
347
codes = _get_codes_for_values (values , dtype .categories )
0 commit comments