Skip to content

Commit 6d37573

Browse files
authored
REF: remove drop_level kwarg from MultiIndex._get_loc_level (#42315)
1 parent 0b523cb commit 6d37573

File tree

2 files changed

+23
-16
lines changed

2 files changed

+23
-16
lines changed

pandas/core/generic.py

+7-3
Original file line numberDiff line numberDiff line change
@@ -3765,11 +3765,15 @@ class animal locomotion
37653765

37663766
if isinstance(index, MultiIndex):
37673767
try:
3768-
loc, new_index = index._get_loc_level(
3769-
key, level=0, drop_level=drop_level
3770-
)
3768+
loc, new_index = index._get_loc_level(key, level=0)
37713769
except TypeError as e:
37723770
raise TypeError(f"Expected label or tuple of labels, got {key}") from e
3771+
else:
3772+
if not drop_level:
3773+
if lib.is_integer(loc):
3774+
new_index = index[loc : loc + 1]
3775+
else:
3776+
new_index = index[loc]
37733777
else:
37743778
loc = index.get_loc(key)
37753779

pandas/core/indexes/multi.py

+16-13
Original file line numberDiff line numberDiff line change
@@ -2931,17 +2931,22 @@ def get_loc_level(self, key, level=0, drop_level: bool = True):
29312931
level = self._get_level_number(level)
29322932
else:
29332933
level = [self._get_level_number(lev) for lev in level]
2934-
return self._get_loc_level(key, level=level, drop_level=drop_level)
29352934

2936-
def _get_loc_level(self, key, level: int | list[int] = 0, drop_level: bool = True):
2935+
loc, mi = self._get_loc_level(key, level=level)
2936+
if not drop_level:
2937+
if lib.is_integer(loc):
2938+
mi = self[loc : loc + 1]
2939+
else:
2940+
mi = self[loc]
2941+
return loc, mi
2942+
2943+
def _get_loc_level(self, key, level: int | list[int] = 0):
29372944
"""
29382945
get_loc_level but with `level` known to be positional, not name-based.
29392946
"""
29402947

29412948
# different name to distinguish from maybe_droplevels
2942-
def maybe_mi_droplevels(indexer, levels, drop_level: bool):
2943-
if not drop_level:
2944-
return self[indexer]
2949+
def maybe_mi_droplevels(indexer, levels):
29452950
# kludge around
29462951
orig_index = new_index = self[indexer]
29472952

@@ -2969,7 +2974,7 @@ def maybe_mi_droplevels(indexer, levels, drop_level: bool):
29692974

29702975
result = loc if result is None else result & loc
29712976

2972-
return result, maybe_mi_droplevels(result, level, drop_level)
2977+
return result, maybe_mi_droplevels(result, level)
29732978

29742979
# kludge for #1796
29752980
if isinstance(key, list):
@@ -2980,7 +2985,7 @@ def maybe_mi_droplevels(indexer, levels, drop_level: bool):
29802985
try:
29812986
if key in self.levels[0]:
29822987
indexer = self._get_level_indexer(key, level=level)
2983-
new_index = maybe_mi_droplevels(indexer, [0], drop_level)
2988+
new_index = maybe_mi_droplevels(indexer, [0])
29842989
return indexer, new_index
29852990
except (TypeError, InvalidIndexError):
29862991
pass
@@ -2995,7 +3000,7 @@ def partial_selection(key, indexer=None):
29953000
ilevels = [
29963001
i for i in range(len(key)) if key[i] != slice(None, None)
29973002
]
2998-
return indexer, maybe_mi_droplevels(indexer, ilevels, drop_level)
3003+
return indexer, maybe_mi_droplevels(indexer, ilevels)
29993004

30003005
if len(key) == self.nlevels and self.is_unique:
30013006
# Complete key in unique index -> standard get_loc
@@ -3030,10 +3035,10 @@ def partial_selection(key, indexer=None):
30303035
if indexer is None:
30313036
indexer = slice(None, None)
30323037
ilevels = [i for i in range(len(key)) if key[i] != slice(None, None)]
3033-
return indexer, maybe_mi_droplevels(indexer, ilevels, drop_level)
3038+
return indexer, maybe_mi_droplevels(indexer, ilevels)
30343039
else:
30353040
indexer = self._get_level_indexer(key, level=level)
3036-
return indexer, maybe_mi_droplevels(indexer, [level], drop_level)
3041+
return indexer, maybe_mi_droplevels(indexer, [level])
30373042

30383043
def _get_level_indexer(self, key, level: int = 0, indexer=None):
30393044
# `level` kwarg is _always_ positional, never name
@@ -3268,9 +3273,7 @@ def _update_indexer(idxr: Index | None, indexer: Index | None, key) -> Index:
32683273
else:
32693274
# a single label
32703275
indexer = _update_indexer(
3271-
_convert_to_indexer(
3272-
self.get_loc_level(k, level=i, drop_level=False)[0]
3273-
),
3276+
_convert_to_indexer(self._get_loc_level(k, level=i)[0]),
32743277
indexer=indexer,
32753278
key=seq,
32763279
)

0 commit comments

Comments
 (0)