Pandas の DataFrame リセットインデックス

Suraj Joshi 2023年1月30日
  1. Pandas DataFrame reset_index() メソッド
  2. pandas.DataFrame.reset_index() メソッドを使用してデータフレームのインデックスをリセットする
Pandas の DataFrame リセットインデックス

このチュートリアルでは、pandas.DataFrame.reset_index() を使って Pandas DataFrame のインデックスをリセットする方法を説明します。reset_index() メソッドは、0 から (DataFrame-1 の行数) までの範囲の数値で、DataFrame のインデックスをデフォルトのインデックスに設定します。

Pandas DataFrame reset_index() メソッド

構文

DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill="")

pandas.DataFrame.reset_index() メソッドを使用してデータフレームのインデックスをリセットする

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

student_df = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [17, 20, 18, 21, 15],
        "City": ["New York", "Portland", "Boston", "Seattle", "Austin"],
        "Grade": ["A", "B-", "B+", "A-", "A"],
    },
    index=roll_no,
)

print(student_df)

出力:

        Name  Age      City Grade
501    Alice   17  New York     A
502   Steven   20  Portland    B-
503  Neesham   18    Boston    B+
504    Chris   21   Seattle    A-
505    Alice   15    Austin     A

出力に表示されているように、5 行 4 列の DataFrame があるとします。また、DataFrame にはインデックスが設定されています。

DataFrame のインデックスをリセットする DataFrame の初期インデックスを列として保持する

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

student_df = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [17, 20, 18, 21, 15],
        "City": ["New York", "Portland", "Boston", "Seattle", "Austin"],
        "Grade": ["A", "B-", "B+", "A-", "A"],
    },
    index=roll_no,
)

print("Initial DataFrame:")
print(student_df)
print("")

print("DataFrame after reset_index:")
student_df.reset_index(inplace=True, drop=False)
print(student_df)

出力:

Initial DataFrame:
        Name  Age      City Grade
501    Alice   17  New York     A
502   Steven   20  Portland    B-
503  Neesham   18    Boston    B+
504    Chris   21   Seattle    A-
505    Alice   15    Austin     A

DataFrame after reset_index:
   index     Name  Age      City Grade
0    501    Alice   17  New York     A
1    502   Steven   20  Portland    B-
2    503  Neesham   18    Boston    B+
3    504    Chris   21   Seattle    A-
4    505    Alice   15    Austin     A

DataFrame student_df のインデックスをデフォルトのインデックスにリセットします。inplace=True は元の DataFrame 自体に変更を加えます。drop=False を指定した場合は、reset_index() メソッドを使った後で初期値のインデックスを DataFrame のカラムに追加します。

DataFrame のインデックスをリセットする DataFrame の初期インデックスを削除する

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

student_df = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [17, 20, 18, 21, 15],
        "City": ["New York", "Portland", "Boston", "Seattle", "Austin"],
        "Grade": ["A", "B-", "B+", "A-", "A"],
    },
    index=roll_no,
)

print("Initial DataFrame:")
print(student_df)
print("")

print("DataFrame after reset_index:")
student_df.reset_index(inplace=True, drop=True)
print(student_df)

出力:

Initial DataFrame:
        Name  Age      City Grade
501    Alice   17  New York     A
502   Steven   20  Portland    B-
503  Neesham   18    Boston    B+
504    Chris   21   Seattle    A-
505    Alice   15    Austin     A

DataFrame after reset_index:
      Name  Age      City Grade
0    Alice   17  New York     A
1   Steven   20  Portland    B-
2  Neesham   18    Boston    B+
3    Chris   21   Seattle    A-
4    Alice   15    Austin     A

DataFrame student_df のインデックスをデフォルトのインデックスにリセットします。メソッドで drop=True を指定しているので、初期インデックスは DataFrame から削除されます。

行を削除した後の DataFrame のインデックスをリセットする

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

student_df = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [17, 20, 18, 21, 15],
        "City": ["New York", "Portland", "Boston", "Seattle", "Austin"],
        "Grade": ["A", "B-", "B+", "A-", "A"],
    }
)

student_df.drop([2, 3], inplace=True)
print("Initial DataFrame:")
print(student_df)
print("")

student_df.reset_index(inplace=True, drop=True)
print("DataFrame after reset_index:")
print(student_df)

出力:

Initial DataFrame:
     Name  Age      City Grade
0   Alice   17  New York     A
1  Steven   20  Portland    B-
4   Alice   15    Austin     A

DataFrame after reset_index:
     Name  Age      City Grade
0   Alice   17  New York     A
1  Steven   20  Portland    B-
2   Alice   15    Austin     A

出力を見るとわかるように、行を削除した後にインデックスが欠落しています。このような場合は reset_index() メソッドを用いれば、値が欠落していないインデックスを利用することができます。

初期インデックスを DataFrame のカラムに配置したい場合は、reset_index() メソッドで drop=False を利用します。

著者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

関連記事 - Pandas Index