pandas.DataFrame.reset_index#

DataFrame.reset_index(level=None, *, drop=False, inplace=False, col_level=0, col_fill='', allow_duplicates=<no_default>, names=None)[source] #

Reset the index, or a level of it.

Reset the index of the DataFrame, and use the default one instead. If the DataFrame has a MultiIndex, this method can remove one or more levels.

Parameters:
levelint, str, tuple, or list, default None

Only remove the given levels from the index. Removes all levels by default.

dropbool, default False

Do not try to insert index into dataframe columns. This resets the index to the default integer index.

inplacebool, default False

Whether to modify the DataFrame rather than creating a new one.

col_levelint or str, default 0

If the columns have multiple levels, determines which level the labels are inserted into. By default it is inserted into the first level.

col_fillobject, default ‘’

If the columns have multiple levels, determines how the other levels are named. If None then the index name is repeated.

allow_duplicatesbool, optional, default lib.no_default

Allow duplicate column labels to be created.

Added in version 1.5.0.

namesint, str or 1-dimensional list, default None

Using the given string, rename the DataFrame column which contains the index data. If the DataFrame has a MultiIndex, this has to be a list or tuple with length equal to the number of levels.

Added in version 1.5.0.

Returns:
DataFrame or None

DataFrame with the new index or None if inplace=True.

See also

DataFrame.set_index

Opposite of reset_index.

DataFrame.reindex

Change to new indices or expand indices.

DataFrame.reindex_like

Change to same indices as other DataFrame.

Examples

>>> df = pd.DataFrame([('bird', 389.0),
...  ('bird', 24.0),
...  ('mammal', 80.5),
...  ('mammal', np.nan)],
...  index=['falcon', 'parrot', 'lion', 'monkey'],
...  columns=('class', 'max_speed'))
>>> df
 class max_speed
falcon bird 389.0
parrot bird 24.0
lion mammal 80.5
monkey mammal NaN

When we reset the index, the old index is added as a column, and a new sequential index is used:

>>> df.reset_index()
 index class max_speed
0 falcon bird 389.0
1 parrot bird 24.0
2 lion mammal 80.5
3 monkey mammal NaN

We can use the drop parameter to avoid the old index being added as a column:

>>> df.reset_index(drop=True)
 class max_speed
0 bird 389.0
1 bird 24.0
2 mammal 80.5
3 mammal NaN

You can also use reset_index with MultiIndex.

>>> index = pd.MultiIndex.from_tuples([('bird', 'falcon'),
...  ('bird', 'parrot'),
...  ('mammal', 'lion'),
...  ('mammal', 'monkey')],
...  names=['class', 'name'])
>>> columns = pd.MultiIndex.from_tuples([('speed', 'max'),
...  ('species', 'type')])
>>> df = pd.DataFrame([(389.0, 'fly'),
...  (24.0, 'fly'),
...  (80.5, 'run'),
...  (np.nan, 'jump')],
...  index=index,
...  columns=columns)
>>> df
 speed species
 max type
class name
bird falcon 389.0 fly
 parrot 24.0 fly
mammal lion 80.5 run
 monkey NaN jump

Using the names parameter, choose a name for the index column:

>>> df.reset_index(names=['classes', 'names'])
 classes names speed species
 max type
0 bird falcon 389.0 fly
1 bird parrot 24.0 fly
2 mammal lion 80.5 run
3 mammal monkey NaN jump

If the index has multiple levels, we can reset a subset of them:

>>> df.reset_index(level='class')
 class speed species
 max type
name
falcon bird 389.0 fly
parrot bird 24.0 fly
lion mammal 80.5 run
monkey mammal NaN jump

If we are not dropping the index, by default, it is placed in the top level. We can place it in another level:

>>> df.reset_index(level='class', col_level=1)
 speed species
 class max type
name
falcon bird 389.0 fly
parrot bird 24.0 fly
lion mammal 80.5 run
monkey mammal NaN jump

When the index is inserted under another level, we can specify under which one with the parameter col_fill:

>>> df.reset_index(level='class', col_level=1, col_fill='species')
 species speed species
 class max type
name
falcon bird 389.0 fly
parrot bird 24.0 fly
lion mammal 80.5 run
monkey mammal NaN jump

If we specify a nonexistent level for col_fill, it is created:

>>> df.reset_index(level='class', col_level=1, col_fill='genus')
 genus speed species
 class max type
name
falcon bird 389.0 fly
parrot bird 24.0 fly
lion mammal 80.5 run
monkey mammal NaN jump