Skip to content

Commit c87be76

Browse files
committed
PERF: do not expand categoricals when re-coding
1 parent 8da49f9 commit c87be76

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

pandas/core/categorical.py

+11-9
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)