@@ -2988,6 +2988,7 @@ def maybe_mi_droplevels(indexer, levels):
2988
2988
if isinstance (key , tuple ) and level == 0 :
2989
2989
2990
2990
try :
2991
+ # Check if this tuple is a single key in our first level
2991
2992
if key in self .levels [0 ]:
2992
2993
indexer = self ._get_level_indexer (key , level = level )
2993
2994
new_index = maybe_mi_droplevels (indexer , [0 ])
@@ -3021,19 +3022,25 @@ def maybe_mi_droplevels(indexer, levels):
3021
3022
indexer = None
3022
3023
for i , k in enumerate (key ):
3023
3024
if not isinstance (k , slice ):
3024
- k = self ._get_level_indexer (k , level = i )
3025
- if isinstance (k , slice ):
3026
- # everything
3027
- if k .start == 0 and k .stop == len (self ):
3028
- k = slice (None , None )
3025
+ loc_level = self ._get_level_indexer (k , level = i )
3026
+ if isinstance (loc_level , slice ):
3027
+ if com .is_null_slice (loc_level ) or com .is_full_slice (
3028
+ loc_level , len (self )
3029
+ ):
3030
+ # everything
3031
+ continue
3032
+ else :
3033
+ raise TypeError (
3034
+ f"Expected label or tuple of labels, got { key } "
3035
+ )
3029
3036
else :
3030
- k_index = k
3037
+ k_index = loc_level
3031
3038
3032
- if isinstance ( k , slice ):
3033
- if k == slice ( None , None ):
3034
- continue
3035
- else :
3036
- raise TypeError ( key )
3039
+ elif com . is_null_slice ( k ):
3040
+ # taking everything, does not affect `indexer` below
3041
+ continue
3042
+ else :
3043
+ raise TypeError ( f"Expected label or tuple of labels, got { key } " )
3037
3044
3038
3045
if indexer is None :
3039
3046
indexer = k_index
0 commit comments