pandas.DataFrame.reset_index#

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

重置索引,或重置其一个级别。

重置 DataFrame 的索引,并使用默认索引代替。如果 DataFrame 具有 MultiIndex,此方法可以删除一个或多个级别。

参数:
级别int, str, tuple 或 list, 默认 None

仅从索引中移除给定的级别。默认情况下会移除所有级别。

丢弃bool, 默认 False

不要尝试将索引插入到数据框列中。这会将索引重置为默认的整数索引。

就地bool, 默认 False

是否修改 DataFrame 而不是创建一个新的。

col_levelint 或 str, 默认值 0

如果列有多个级别,确定标签插入到哪个级别。默认情况下,它插入到第一个级别。

col_fill对象, 默认 ‘’

如果列有多个级别,确定其他级别的命名方式。如果为 None,则重复索引名称。

allow_duplicatesbool, 可选, 默认 lib.no_default

允许创建重复的列标签。

Added in version 1.5.0.

名称int, str 或 1 维列表,默认 None

使用给定的字符串,重命名包含索引数据的 DataFrame 列。如果 DataFrame 具有 MultiIndex,这必须是一个长度等于级别数的列表。

Added in version 1.5.0.

返回:
DataFrame 或 None

带有新索引的 DataFrame 或如果 inplace=True 则为 None。

参见

DataFrame.set_index

与 reset_index 相反。

DataFrame.reindex

更改到新的索引或扩展索引。

DataFrame.reindex_like

更改为与其他 DataFrame 相同的索引。

示例

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

你也可以在 MultiIndex 中使用 reset_index

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