Skip to content

Commit 2eb6d01

Browse files
committed
rebased
1 parent 7672f4c commit 2eb6d01

File tree

3 files changed

+20
-29
lines changed

3 files changed

+20
-29
lines changed

pandas/core/arrays/categorical.py

+5-6
Original file line numberDiff line numberDiff line change
@@ -1414,14 +1414,13 @@ def memory_usage(self, deep=False):
14141414
@Appender(_shared_docs['searchsorted'])
14151415
def searchsorted(self, value, side='left', sorter=None):
14161416
from pandas.core.series import Series
1417-
1418-
codes = _get_codes_for_values(Series(value).values, self.categories)
1419-
if -1 in codes:
1417+
value_codes = _get_codes_for_values(Series(value).values, self.categories)
1418+
if -1 in value_codes:
14201419
raise KeyError("Value(s) to be inserted must be in categories.")
1420+
value_codes = value_codes[0] if is_scalar(value) else value_codes
14211421

1422-
codes = codes[0] if is_scalar(value) else codes
1423-
1424-
return self.codes.searchsorted(codes, side=side, sorter=sorter)
1422+
return algorithms.searchsorted(self._codes, value_codes,
1423+
side=side, sorter=sorter)
14251424

14261425
def isna(self):
14271426
"""

pandas/core/base.py

-3
Original file line numberDiff line numberDiff line change
@@ -1521,9 +1521,6 @@ def factorize(self, sort=False, na_sentinel=-1):
15211521
wrong locations will likely be returned. Pandas does *not*
15221522
check this for you.
15231523
1524-
You can check sortedness by calling
1525-
:meth:`%(klass)s.is_monotonic_increasing`.
1526-
15271524
Parameters
15281525
----------
15291526
value : array_like

pandas/tests/arrays/categorical/test_analytics.py

+15-20
Original file line numberDiff line numberDiff line change
@@ -78,55 +78,50 @@ def test_mode(self, values, categories, exp_mode):
7878
exp = Categorical(exp_mode, categories=categories, ordered=True)
7979
tm.assert_categorical_equal(res, exp)
8080

81-
def test_searchsorted(self, ordered):
81+
def test_searchsorted(self, ordered_fixture):
8282
# https://github.com/pandas-dev/pandas/issues/8420
8383
# https://github.com/pandas-dev/pandas/issues/14522
8484

85-
c = Categorical(['cheese', 'milk', 'apple', 'bread', 'bread'],
86-
categories=['cheese', 'milk', 'apple', 'bread'],
87-
ordered=ordered)
88-
s = Series(c)
85+
cat = Categorical(['cheese', 'milk', 'apple', 'bread', 'bread'],
86+
categories=['cheese', 'milk', 'apple', 'bread'],
87+
ordered=ordered_fixture)
88+
ser = Series(cat)
8989

9090
# Searching for single item argument, side='left' (default)
91-
res_cat = c.searchsorted('apple')
91+
res_cat = cat.searchsorted('apple')
9292
assert res_cat == 2
9393
assert is_scalar(res_cat)
9494

95-
res_ser = s.searchsorted('apple')
95+
res_ser = ser.searchsorted('apple')
9696
assert res_ser == 2
9797
assert is_scalar(res_ser)
9898

99-
res_cat = c.searchsorted('apple')
100-
res_ser = s.searchsorted('apple')
101-
assert res_cat == 2
102-
assert res_ser == 2
103-
10499
# Searching for single item array, side='left' (default)
105-
res_cat = c.searchsorted(['bread'])
106-
res_ser = s.searchsorted(['bread'])
100+
res_cat = cat.searchsorted(['bread'])
101+
res_ser = ser.searchsorted(['bread'])
107102
exp = np.array([3], dtype=np.intp)
108103
tm.assert_numpy_array_equal(res_cat, exp)
109104
tm.assert_numpy_array_equal(res_ser, exp)
110105

111106
# Searching for several items array, side='right'
112-
res_cat = c.searchsorted(['apple', 'bread'], side='right')
113-
res_ser = s.searchsorted(['apple', 'bread'], side='right')
107+
res_cat = cat.searchsorted(['apple', 'bread'], side='right')
108+
res_ser = ser.searchsorted(['apple', 'bread'], side='right')
114109
exp = np.array([3, 5], dtype=np.intp)
115110
tm.assert_numpy_array_equal(res_cat, exp)
116111
tm.assert_numpy_array_equal(res_ser, exp)
117112

118113
# Searching for a single value that is not from the Categorical
119114
msg = r"Value\(s\) to be inserted must be in categories"
120115
with pytest.raises(KeyError, match=msg):
121-
c.searchsorted('cucumber')
116+
cat.searchsorted('cucumber')
122117
with pytest.raises(KeyError, match=msg):
123-
s.searchsorted('cucumber')
118+
ser.searchsorted('cucumber')
124119

125120
# Searching for multiple values one of each is not from the Categorical
126121
with pytest.raises(KeyError, match=msg):
127-
c.searchsorted(['bread', 'cucumber'])
122+
cat.searchsorted(['bread', 'cucumber'])
128123
with pytest.raises(KeyError, match=msg):
129-
s.searchsorted(['bread', 'cucumber'])
124+
ser.searchsorted(['bread', 'cucumber'])
130125

131126
def test_unique(self):
132127
# categories are reordered based on value when ordered=False

0 commit comments

Comments
 (0)