diff --git a/pandas/core/series.py b/pandas/core/series.py index 6620cc1786340..4b47d71c453c8 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -140,6 +140,7 @@ ensure_index, ) import pandas.core.indexes.base as ibase +from pandas.core.indexes.multi import maybe_droplevels from pandas.core.indexing import ( check_bool_indexer, check_deprecated_indexers, @@ -1062,7 +1063,24 @@ def _get_value(self, label, takeable: bool = False): # Similar to Index.get_value, but we do not fall back to positional loc = self.index.get_loc(label) - return self.index._get_values_for_loc(self, loc, label) + + if is_integer(loc): + return self._values[loc] + + if isinstance(self.index, MultiIndex): + mi = self.index + new_values = self._values[loc] + if len(new_values) == 1 and mi.nlevels == 1: + # If more than one level left, we can not return a scalar + return new_values[0] + + new_index = mi[loc] + new_index = maybe_droplevels(new_index, label) + new_ser = self._constructor(new_values, index=new_index, name=self.name) + return new_ser.__finalize__(self) + + else: + return self.iloc[loc] def __setitem__(self, key, value) -> None: check_deprecated_indexers(key)