@@ -293,13 +293,10 @@ def __init__(self, values, categories=None, ordered=None, dtype=None,
293293
294294 # sanitize input
295295 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 )
301298
302- else :
299+ elif not isinstance ( values , ( ABCIndexClass , ABCSeries )) :
303300 if not isinstance (values , np .ndarray ):
304301 values = _convert_to_list_like (values )
305302 from pandas .core .series import _sanitize_array
@@ -330,9 +327,14 @@ def __init__(self, values, categories=None, ordered=None, dtype=None,
330327 raise NotImplementedError ("> 1 ndim Categorical are not "
331328 "supported at this time" )
332329
333- if dtype .categories is None :
334- # we're inferring from values
335- dtype = CategoricalDtype (categories , dtype .ordered )
330+ # we're inferring from values
331+ dtype = CategoricalDtype (categories , dtype .ordered )
332+
333+ elif is_categorical_dtype (values ):
334+ old_codes = (values .cat .codes if isinstance (values , ABCSeries )
335+ else values .codes )
336+ codes = _recode_for_categories (old_codes , values .dtype .categories ,
337+ dtype .categories )
336338
337339 else :
338340 codes = _get_codes_for_values (values , dtype .categories )
0 commit comments