Сообщить об ошибке.

Метод .reset_index() объектов Series/DataFrame в pandas

Синтаксис:

df = DataFrame.reset_index(level=None, *, drop=False, inplace=False, 
                           col_level=0, col_fill='', names=None, 
                           allow_duplicates=False)

s = Series.reset_index(level=None, *, drop=False, name=no_default, 
                       inplace=False)

Параметры:

  • level=None - для DataFrame/Series с MultiIndex. Удаляет из индекса только указанные уровни. По умолчанию удаляет все уровни.
  • drop=False - просто сбрасывает индекс, и вставляет его в качестве столбца в новый DataFrame. При этом индекс восстанавливается до целочисленного индекса по умолчанию. Если True, то индекс НЕ вставляется в качестве столбца.
  • inplace=False - следует ли изменять фрейм данных вместо создания нового.
  • col_level=0 - если столбцы имеют несколько уровней, то определяет, на какой уровень вставляются метки. По умолчанию они вставляются на первый уровень. НЕ используется в Series.
  • col_fill='' - если столбцы имеют несколько уровней, то определяет, как будут называться другие уровни. Если нет, то имя индекса повторяется.
  • allow_duplicates=False - разрешает/запрещает создание повторяющихся меток столбцов. НЕ используется в Series.
  • names=None - строка для переименование столбца DataFrame, который содержит данные индекса. Если DataFrame имеет MultiIndex, то это должен быть список или кортеж с длиной, равной количеству уровней. НЕ используется в Series.

Возвращаемое значение:

  • DataFrame/Series с новым индексом или None, если inplace=True.

Описание:

Методы DataFrame.reset_index() и Series.reset_index() модуля pandas сбрасывают индекс или его уровень и использует вместо него индекс по умолчанию.

Если DataFrame имеет MultiIndex, то этот метод может удалить один или несколько уровней.

Примеры использования метода DataFrame.reset_index()

>>> import pandas as pd
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

Когда сбрасывается индекс, старый индекс добавляется в виде столбца, и используется новый последовательный индекс по умолчанию:

>>> 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

Можно использовать аргумент drop, чтобы избежать добавления старого индекса в качестве столбца:

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

Также можно использовать метод DataFrame.reset_index() с 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

С помощью аргумента names выберем имя для столбца индекса:

>>> 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

Если индекс имеет несколько уровней, то можно сбросить их подмножество:

>>> 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

Если индекс НЕ отбрасывается, то по умолчанию он помещается на верхний уровень. Можно разместить его на другом уровне:

>>> 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

Когда индекс вставляется на другой уровень, то можно указать, под каким, используя аргумент 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

Если указать несуществующий уровень для col_fill, то он создается:

>>> 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

Примеры использования метода Series.reset_index()

>>> import pandas as pd
s = pd.Series([1, 2, 3, 4], name='foo',
              index=pd.Index(['a', 'b', 'c', 'd'], name='idx'))
>>> s
# idx
# a    1
# b    2
# c    3
# d    4
# Name: foo, dtype: int64

Создадим DataFrame с индексом по умолчанию.

>>> s.reset_index()
#   idx  foo
# 0   a    1
# 1   b    2
# 2   c    3
# 3   d    4

Чтобы указать имя нового столбца, используем аргумент name.

>>> s.reset_index(name='values')
#   idx  values
# 0   a       1
# 1   b       2
# 2   c       3
# 3   d       4

Чтобы создать новую серию с индексом по умолчанию, используем аргумент drop=True.

>>> s.reset_index(drop=True)
# 0    1
# 1    2
# 2    3
# 3    4
# Name: foo, dtype: int64

Аргумент level используется для Series с многоуровневым индексом.

>>> import numpy as np
arrays = [np.array(['bar', 'bar', 'baz', 'baz']),
          np.array(['one', 'two', 'one', 'two'])]
s2 = pd.Series(
    range(4), name='foo',
    index=pd.MultiIndex.from_arrays(arrays,
                                    names=['a', 'b']))
>>> s2
# a    b  
# bar  one    0
#      two    1
# baz  one    2
#      two    3
# Name: foo, dtype: int64

Чтобы удалить определенный уровень из индекса, используем level.

>>> s2.reset_index(level='a')
#        a  foo
# b
# one  bar    0
# two  bar    1
# one  baz    2
# two  baz    3

Если уровень level не задан, то из индекса удаляются все уровни.

>>> s2.reset_index()
#      a    b  foo
# 0  bar  one    0
# 1  bar  two    1
# 2  baz  one    2
# 3  baz  two    3