@@ -5614,6 +5614,12 @@ def reset_index(
5614
5614
col_fill : object, default ''
5615
5615
If the columns have multiple levels, determines how the other
5616
5616
levels are named. If None then the index name is repeated.
5617
+ names : str, tuple or list, default None
5618
+ Using the given string, rename the DataFrame column which contains the index data.
5619
+ If the DataFrame has a MultiIndex, this has to be a list or tuple with length
5620
+ equal to the number of levels.
5621
+
5622
+ .. versionadded:: 1.4.0
5617
5623
5618
5624
Returns
5619
5625
-------
@@ -5756,6 +5762,14 @@ class max type
5756
5762
if len (level ) < self .index .nlevels :
5757
5763
new_index = self .index .droplevel (level )
5758
5764
5765
+ if names is not None :
5766
+ if isinstance (self .index , MultiIndex ):
5767
+ if not isinstance (names , (tuple , list )):
5768
+ raise ValueError ("Names must be a tuple or list" )
5769
+ else :
5770
+ if not isinstance (names , str ):
5771
+ raise ValueError ("Names must be a string" )
5772
+
5759
5773
if not drop :
5760
5774
to_insert : Iterable [tuple [Any , Any | None ]]
5761
5775
if isinstance (self .index , MultiIndex ):
@@ -5764,6 +5778,14 @@ class max type
5764
5778
(n if n is not None else f"level_{ i } " )
5765
5779
for i , n in enumerate (self .index .names )
5766
5780
]
5781
+ else :
5782
+
5783
+ if len (names ) != self .index .nlevels :
5784
+ raise ValueError (
5785
+ f"The number of provided names "
5786
+ f"({ len (names )} ) does not match the number of"
5787
+ f" MultiIndex levels ({ self .index .nlevels } )"
5788
+ )
5767
5789
to_insert = zip (self .index .levels , self .index .codes )
5768
5790
else :
5769
5791
default = "index" if "index" not in self else "level_0"
0 commit comments