Skip to content

Commit 07133b0

Browse files
committed
CLN: Remove _update_indexer function
1 parent 4ea8570 commit 07133b0

File tree

1 file changed

+17
-16
lines changed

1 file changed

+17
-16
lines changed

pandas/core/indexes/multi.py

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2996,18 +2996,19 @@ def _update_indexer(idxr, indexer=indexer):
29962996
return idxr & indexer
29972997

29982998
need_sort = False
2999+
indexer = Index(np.arange(n))
29993000
for i, k in enumerate(reversed(seq)):
30003001
i = len(seq) - 1 - i # Counting in reverse
30013002

30023003
if com.is_bool_indexer(k):
30033004
# a boolean indexer, must be the same length!
30043005
k = np.asarray(k)
3005-
indexer = _update_indexer(_convert_to_indexer(k), indexer=indexer)
3006+
indexer = _convert_to_indexer(k) & indexer
30063007

30073008
elif is_list_like(k):
30083009
# a collection of labels to include from this level (these
30093010
# are or'd)
3010-
indexers = None
3011+
indexers_union = None
30113012
if not need_sort:
30123013
# Find out if the list_like label are sorted as the levels or not
30133014
k_codes = np.array(
@@ -3024,45 +3025,45 @@ def _update_indexer(idxr, indexer=indexer):
30243025
# ordered as previously seen indexes
30253026
idxrs = indexer.intersection(idxrs)
30263027

3027-
indexers = (
3028+
indexers_union = (
30283029
idxrs
3029-
if indexers is None
3030-
else indexers.union(idxrs, sort=False)
3030+
if indexers_union is None
3031+
else indexers_union.union(idxrs, sort=False)
30313032
)
30323033
except KeyError:
30333034
# ignore not founds
30343035
continue
30353036

3036-
if indexers is not None:
3037+
if indexers_union is not None:
30373038
if need_sort:
3038-
indexer = indexers
3039+
indexer = indexers_union
30393040
else:
3040-
indexer = _update_indexer(indexers, indexer=indexer)
3041+
indexer = indexers_union & indexer
30413042
else:
30423043
# no matches we are done
30433044
return Int64Index([])._ndarray_values
30443045

30453046
elif com.is_null_slice(k):
30463047
# empty slice
30473048
# index is given to conserve the order of this level
3048-
indexer = _update_indexer(Int64Index(np.arange(n)), indexer=indexer)
3049+
# See test TestMultiIndexSlicers.test_per_axis_per_level_doc_examples in tests/indexings
3050+
indexer = Int64Index(np.arange(n)) & indexer
30493051

30503052
elif isinstance(k, slice):
3051-
30523053
# a slice, include BOTH of the labels
3053-
indexer = _update_indexer(
3054+
indexer = (
30543055
_convert_to_indexer(
30553056
self._get_level_indexer(k, level=i, indexer=indexer)
3056-
),
3057-
indexer=indexer,
3057+
)
3058+
& indexer
30583059
)
30593060
else:
30603061
# a single label
3061-
indexer = _update_indexer(
3062+
indexer = (
30623063
_convert_to_indexer(
30633064
self.get_loc_level(k, level=i, drop_level=False)[0]
3064-
),
3065-
indexer=indexer,
3065+
)
3066+
& indexer
30663067
)
30673068

30683069
# empty indexer

0 commit comments

Comments
 (0)