Skip to content

Commit 33249b3

Browse files
committed
PERF: categorical rank GH#15498
1 parent d0a281f commit 33249b3

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

pandas/core/algorithms.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -974,9 +974,6 @@ def _get_data_algo(values, func_map):
974974

975975
f = None
976976

977-
if is_categorical_dtype(values):
978-
values = values._values_for_rank()
979-
980977
if is_float_dtype(values):
981978
f = func_map['float64']
982979
values = _ensure_float64(values)
@@ -992,6 +989,11 @@ def _get_data_algo(values, func_map):
992989
elif is_unsigned_integer_dtype(values):
993990
f = func_map['uint64']
994991
values = _ensure_uint64(values)
992+
993+
elif is_categorical_dtype(values):
994+
f = func_map['float64']
995+
values = values._values_for_rank()
996+
995997
else:
996998
values = _ensure_object(values)
997999

pandas/core/categorical.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -1416,14 +1416,17 @@ def _values_for_rank(self):
14161416
numpy array
14171417
14181418
"""
1419+
from pandas import Series
14191420
if self.ordered:
14201421
values = self.codes
14211422
mask = values == -1
1423+
values = values.astype('float64')
14221424
if mask.any():
1423-
values = values.astype('float64')
14241425
values[mask] = np.nan
14251426
else:
1426-
values = np.array(self)
1427+
values = np.array(
1428+
self.rename_categories(Series(self.categories).rank())
1429+
)
14271430
return values
14281431

14291432
def order(self, inplace=False, ascending=True, na_position='last'):

0 commit comments

Comments
 (0)