diff --git a/pandas/core/indexes/multi.py b/pandas/core/indexes/multi.py index 79b4cbbea7815..68062c413cdb3 100644 --- a/pandas/core/indexes/multi.py +++ b/pandas/core/indexes/multi.py @@ -1,5 +1,15 @@ from sys import getsizeof -from typing import Any, Hashable, Iterable, List, Optional, Sequence, Tuple, Union +from typing import ( + TYPE_CHECKING, + Any, + Hashable, + Iterable, + List, + Optional, + Sequence, + Tuple, + Union, +) import warnings import numpy as np @@ -27,7 +37,7 @@ pandas_dtype, ) from pandas.core.dtypes.dtypes import ExtensionDtype -from pandas.core.dtypes.generic import ABCDataFrame +from pandas.core.dtypes.generic import ABCDataFrame, ABCSeries from pandas.core.dtypes.missing import array_equivalent, isna import pandas.core.algorithms as algos @@ -56,6 +66,9 @@ pprint_thing, ) +if TYPE_CHECKING: + from pandas import Series # noqa:F401 + _index_doc_kwargs = dict(ibase._index_doc_kwargs) _index_doc_kwargs.update( dict(klass="MultiIndex", target_klass="MultiIndex or list of tuples") @@ -2318,8 +2331,10 @@ def reindex(self, target, method=None, level=None, limit=None, tolerance=None): # -------------------------------------------------------------------- # Indexing Methods - def get_value(self, series, key): + def get_value(self, series: "Series", key): # Label-based + assert isinstance(series, ABCSeries) + if not is_hashable(key) or is_iterator(key): # We allow tuples if they are hashable, whereas other Index # subclasses require scalar. @@ -2338,7 +2353,7 @@ def _try_mi(k): new_index = maybe_droplevels(new_index, k) return series._constructor( new_values, index=new_index, name=series.name - ).__finalize__(self) + ).__finalize__(series) try: return _try_mi(key)