Pandas.DataFrameのインデックスをreset_indexメソッドで振り直す

この記事ではDataFrameのindexを初期化するreset_indexメソッド(pandas.DataFrame.reset_index)についてまとめました。

pandas.DataFrame.reset_indexを使うことで

  • ぐちゃぐちゃになった行indexを整列させる
  • set_indexで指定したindexを初期化する

などのことが行なえます。

目次

reset_indexメソッドの使い方

このセクションでは、reset_indexメソッドの基本的な使い方を紹介します。

まずは必要なライブラリをimportして、サンプルとして使うDataFrameを作成しておきます。

In [1]:
# ライブラリのimport
import pandas as pd
import numpy as np

# サンプルデータの作成
name = ["taro","jiro","saburo","shiro"]

feature = ["height","weight","blood type","age"]

data = np.array([
    [190,180,170,160],
    [100,90,80,70],
    ["A","B","AB","O"],
    [30,28,26,24]
]).T

# DataFrame化
df = pd.DataFrame(data, 
                  columns=feature)
df=df.sample(frac=1)

# 確認
df
Out[1]:
height weight blood type age
0 190 100 A 30
1 180 90 B 28
2 170 80 AB 26
3 160 70 O 24

reset_indexメソッドでindexを振り直す

DataFrameのreset_indexメソッドを使えば、DataFrameの行のindexを簡単に振り直すことができます。

例えば、サンプルとして作ったDataFrame dfのindexは0,3,1,2の順に並んでいます。

これをreset_indexすることで先頭の行から順に0,1,2,3のようにindexを振り直すことができます。

In [2]:
df2 = df.reset_index() # 元のindexはindexというカラムに保存される

df2
Out[2]:
index height weight blood type age
0 0 190 100 A 30
1 1 180 90 B 28
2 2 170 80 AB 26
3 3 160 70 O 24

このとき、reset_indexの引数に何も指定しなければ、index列が作られて、オリジナルのDataFrameについていたindexが保存されます。

drop=Trueでindex列を作らない

reset_indexメソッドにはdrop引数があります。

この値は「オリジナルのindexを列として保存しておくならFalse、保存しないならTrue」にします。

デフォルトではFalseになっているので、もしもindex列が不要ならばTrueにしましょう。

In [3]:
df3 = df.reset_index(
    drop=True # オリジナルのindexを列として保存しない
)

df3
Out[3]:
height weight blood type age
0 190 100 A 30
1 180 90 B 28
2 170 80 AB 26
3 160 70 O 24

inplace=TrueでDataFrameを直接変更

reset_indexメソッドにはinplace引数があります。

この値は「reset_indexを実行したオブジェクト自体を変更する場合はTrue、変更しないのならFalse」にします。

デフォルトではFalseになっているので、メソッドの出力として新しいDataFrameが返ってきますがオリジナルのDataFrameは変更されていません。

もしもオリジナルのDataFrameオブジェクト自体を変更していいのなら、inplace=Trueとしましょう。

In [4]:
df.reset_index(
    drop=True,
    inplace=True
)

df
Out[4]:
height weight blood type age
0 190 100 A 30
1 180 90 B 28
2 170 80 AB 26
3 160 70 O 24

[発展]set_indexでデフォルトのindex以外のものを使っていた場合

set_indexメソッドを使うと、DataFrameの行indexに適当な列の値を使うことができました。

set_indexについては以下で解説しています。

例えばset_indexでage列をindexに指定します。

In [5]:
df4 = df.set_index("age")        # インデックスにしたい列名

df4
Out[5]:
height weight blood type
age
30 190 100 A
28 180 90 B
26 170 80 AB
24 160 70 O

set_indexを使ったDataFrameに対し、reset_indexを行うと、以下のように0スタートのindexが振り直されます。

つまりreset_indexをつかうことで、元のDataFrameの形に直すことができます。

In [6]:
df4.reset_index()
Out[6]:
age height weight blood type
0 30 190 100 A
1 28 180 90 B
2 26 170 80 AB
3 24 160 70 O

まとめ

この記事ではDataFrameの行indexを初期化するメソッド「reset_index」を紹介しました。

複数のDataFrameを結合した場合や、行を削除した場合などにreset_indexを使う場合が多いかと思います。

元のindexを残しておくかどうかは問題によって変わります。注意しましょう。

この記事を書いた人

第一言語はPythonです。
皆さんRustやりましょう。

目次