Indexから列への変換

前問では、set_index()列をインデックスに変換しました。
これとは逆に、インデックスを列に変換するにはreset_index()を使います。

変数dfの内容を下記とします。インデックスは、10/0110/0410/05です。


Date
Prod
 
Sale
 
10/01A00120
10/04B01011
10/05A0058

df.reset_index(inplace=True)とすると、dfは下記のように変わります。

DateProdSale
010/01A00120
110/04B01011
210/05A0058

新しいインデックスは、0から始まる通し番号で作成されます。

演習

製品ごとの売上記録のDataFrameを作成します。インデックスの名前は、引数nameを使って”Date”と指定します。

import pandas as pd

df = pd.DataFrame(
    [
        ["A001", 20],
        ["B010", 11],
        ["A005", 8],
    ],
    # indexにIndexオブジェクトを設定する
    index=pd.Index(["10/01", "10/04", "10/05"], name="Date"),
    columns=["Prod", "Sale"]
)
df
ProdSale
Date
10/01A00120
10/04B01011
10/05A0058

インデックスを列Dateに変換します。inplace=Trueがあるのでdfが変更されます。df.reset_index(inplace=True)は何も返しません。

df.reset_index(inplace=True)

dfを確認しましょう。インデックスが列Dateに変わりました。このように、インデックスから変換された列の列名は、このインデックスの名前が使われます。もし、インデックスが無名であれば、列名はindexになります。

df
DateProdSale
010/01A00120
110/04B01011
210/05A0058

set_index()同様、下記のようにオプションinplaceの違いで動作が変わります。

  • df.reset_index(inplace=True):写経のように、この式は何も返しません。df自体が変更されます。
  • df.reset_index():下記のように、変更したDataFrameを返します。df自体は変更されません。

inplaceというオプションは、pandasのいろいろなメソッドで使えます。
デフォルト値はFalseで「新しいオブジェクトを作成して返す」という指定です。

元の変数を変更したいときは、inplace=Trueを使います。

コメント

タイトルとURLをコピーしました