diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 1abb01099f977..5b2088e995d51 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -1152,7 +1152,7 @@ def rename( ] raise KeyError(f"{missing_labels} not found in axis") - new_index = ax._transform_index(f, level) + new_index = ax._transform_index(f, level=level) result._set_axis_nocheck(new_index, axis=axis_no, inplace=True) result._clear_item_cache() diff --git a/pandas/core/groupby/grouper.py b/pandas/core/groupby/grouper.py index c5d5d5a301336..d12366caa44e3 100644 --- a/pandas/core/groupby/grouper.py +++ b/pandas/core/groupby/grouper.py @@ -490,7 +490,7 @@ def __init__( self.grouping_vector, # Index self._codes, self._group_index, - ) = index._get_grouper_for_level(mapper, ilevel) + ) = index._get_grouper_for_level(mapper, level=ilevel) # a passed Grouper like, directly get the grouper in the same way # as single grouper groupby, use the group_info to get codes diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py index 6070d6863039e..0a1d624894929 100644 --- a/pandas/core/indexes/base.py +++ b/pandas/core/indexes/base.py @@ -1500,7 +1500,7 @@ def _validate_names( def _get_names(self) -> FrozenList: return FrozenList((self.name,)) - def _set_names(self, values, level=None) -> None: + def _set_names(self, values, *, level=None) -> None: """ Set new names on index. Each name has to be a hashable type. @@ -1906,7 +1906,7 @@ def _drop_level_numbers(self, levnums: list[int]): verify_integrity=False, ) - def _get_grouper_for_level(self, mapper, level=None): + def _get_grouper_for_level(self, mapper, *, level=None): """ Get index grouper corresponding to an index level @@ -1915,7 +1915,7 @@ def _get_grouper_for_level(self, mapper, level=None): mapper: Group mapping function or None Function mapping index values to groups level : int or None - Index level + Index level, positional Returns ------- @@ -5642,7 +5642,7 @@ def map(self, mapper, na_action=None): # TODO: De-duplicate with map, xref GH#32349 @final - def _transform_index(self, func, level=None) -> Index: + def _transform_index(self, func, *, level=None) -> Index: """ Apply function to all values found in index. @@ -5651,6 +5651,7 @@ def _transform_index(self, func, level=None) -> Index: """ if isinstance(self, ABCMultiIndex): if level is not None: + # Caller is responsible for ensuring level is positional. items = [ tuple(func(y) if i == level else y for i, y in enumerate(x)) for x in self diff --git a/pandas/core/indexes/multi.py b/pandas/core/indexes/multi.py index cac0a8cc5791f..7ae5300eb34f1 100644 --- a/pandas/core/indexes/multi.py +++ b/pandas/core/indexes/multi.py @@ -761,6 +761,7 @@ def levels(self) -> FrozenList: def _set_levels( self, levels, + *, level=None, copy: bool = False, validate: bool = True, @@ -954,6 +955,7 @@ def codes(self): def _set_codes( self, codes, + *, level=None, copy: bool = False, validate: bool = True, @@ -1392,7 +1394,7 @@ def format( def _get_names(self) -> FrozenList: return FrozenList(self._names) - def _set_names(self, names, level=None, validate: bool = True): + def _set_names(self, names, *, level=None, validate: bool = True): """ Set new names on index. Each name has to be a hashable type. @@ -1473,7 +1475,7 @@ def _set_names(self, names, level=None, validate: bool = True): # -------------------------------------------------------------------- @doc(Index._get_grouper_for_level) - def _get_grouper_for_level(self, mapper, level): + def _get_grouper_for_level(self, mapper, *, level): indexer = self.codes[level] level_index = self.levels[level]