Pandas Dataframe のインデックスを列に変換する方法
Asad Riaz
2023年1月30日
Pandas
Pandas DataFrame
-
インデックスを新しい列として追加する
df.index -
現在のインデックス列名を変更するには、
rename_axisを指定したreset_indexを使用する -
列をインデックスに変換する
set_indexメソッド -
MultiIndexはcolumnにindexの複数のレイヤーを設定する
Pandas の DataFrame の index を列に変換するさまざまな方法を紹介します。df.index、reset_index、rename axis を使用して、index と set_index の名前を変更します。
また、インデックスの複数のレイヤーを持つ特定の DataFrame にマルチインデックスを適用する方法を紹介します。
インデックスを新しい列として追加する df.index
列としてインデックスを追加する最も簡単な方法は、df.index を新しい列として DataFrame に追加することです。
次のコードを検討してください。
# python 3.x
import pandas as pd
df = pd.DataFrame(
[(1, 2, None), (None, 4, None), (5, None, 7), (5, None, None)],
columns=["a", "b", "d"],
)
df["index"] = df.index
print(df)
出力:
a b d index1
0 1.0 2.0 NaN 0
1 NaN 4.0 NaN 1
2 5.0 NaN 7.0 2
3 5.0 NaN NaN 3
現在のインデックス列名を変更するには、rename_axis を指定した reset_index を使用する
index の名前を変更してから、reset_index をシリーズに使用できます。
# python 3.x
import pandas as pd
df = pd.DataFrame(
[(1, 2, None), (None, 4, None), (5, None, 7), (5, None, None)],
columns=["a", "b", "d"],
)
df = df.rename_axis("index").reset_index()
print(df)
出力:
index a b d
0 0 1.0 2.0 NaN
1 1 NaN 4.0 NaN
2 2 5.0 NaN 7.0
3 3 5.0 NaN NaN
列をインデックスに変換する set_index メソッド
set_index メソッドを使用して任意の列を index に変換できます:
# python 3.x
import pandas as pd
df = pd.DataFrame(
[(1, 2, None), (None, 4, None), (5, 4, 7), (5, 5, None)], columns=["a", "b", "d"]
)
df.set_index("b", inplace=True)
print(df)
出力:
a d
b
2 1.0 NaN
4 NaN NaN
4 5.0 7.0
5 5.0 NaN
または、元のように index 名を削除する場合は、df.index.name = None を実行できます。
# python 3.x
import pandas as pd
df = pd.DataFrame(
[(1, 2, None), (None, 4, None), (5, 4, 7), (5, 5, None)], columns=["a", "b", "d"]
)
df.set_index("b", inplace=True)
df.index.name = None
print(df)
出力:
a d
2 1.0 NaN
4 NaN NaN
4 5.0 7.0
5 5.0 NaN
MultiIndex は column に index の複数のレイヤーを設定する
MultiIndex.from_product() 関数を使用して、次のように MultiIndex を作成できます。
# python 3.x
import pandas as pd
import numpy as np
index = pd.MultiIndex.from_product(
[["Burger", "Steak", "Sandwich"], ["Half", "Full"]], names=["Item", "Type"]
)
df = pd.DataFrame(
index=index, data=np.random.randint(0, 10, (6, 4)), columns=list("abcd")
)
print(df)
出力:
a b c d
Item Type
Burger Half 0 3 9 1
Full 2 2 0 5
Steak Half 8 4 5 5
Full 5 8 0 7
Sandwich Half 2 8 9 5
Full 4 4 5 9
チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe