パンダのmelt()関数とpivot()関数を使用して、変形すると戻す。

パンダのmelt()関数は、DataFrameの形式を広い範囲から狭い範囲に変更するために使用されます。この関数は、1つ以上の列が識別子として機能し、残りのすべての列が値として扱われて行方向に展開され、変数と値の2つの列のみが残ります。

1. パンダのmelt()の例

例を通してみると、melt()関数の使用はより明確です。

import pandas as pd

d1 = {"Name": ["Pankaj", "Lisa", "David"], "ID": [1, 2, 3], "Role": ["CEO", "Editor", "Author"]}

df = pd.DataFrame(d1)

print(df)

df_melted = pd.melt(df, id_vars=["ID"], value_vars=["Name", "Role"])

print(df_melted)

出力:

     Name  ID    Role
0  Pankaj   1     CEO
1    Lisa   2  Editor
2   David   3  Author

   ID variable   value
0   1      Name  Pankaj
1   2      Name    Lisa
2   3      Name   David
3   1      Role     CEO
4   2      Role  Editor
5   3      Role  Author

「var_name」と「value_name」のパラメーターを渡すことで、「variable」と「value」の列名を変更することができます。

df_melted = pd.melt(df, id_vars=["ID"], value_vars=["Name", "Role"], var_name="Attribute", value_name="Value")

おすすめの読み物:Python Pandasのチュートリアル

2. id_varsとして複数の列を指定する

複数の列をid_varsパラメータとして渡した場合、何が起こるか見てみましょう。

df_melted = pd.melt(df, id_vars=["ID", "Name"], value_vars=["Role"])
print(df_melted)

出力:

   ID    Name variable   value
0   1  Pankaj     Role     CEO
1   2    Lisa     Role  Editor
2   3   David     Role  Author

3. melt()関数で列をスキップする

次の例では、「ID」列を省いてもかまいませんが、元のデータフレームからすべての行を使用する必要はありません。

df_melted = pd.melt(df, id_vars=["Name"], value_vars=["Role"])
print(df_melted)

出力:

     Name variable   value
0  Pankaj     Role     CEO
1    Lisa     Role  Editor
2   David     Role  Author

4. ピボット()関数を使用して、解凍されないデータフレームを生成してください。

DataFrameオブジェクトを「unmelt」(結合)して元のデータフレームを取得するためには、pivot()関数を使用することができます。pivot()関数の「index」パラメーターの値は、「id_vars」の値と同じである必要があります。また、「columns」の値は、「variable」列の名前として渡す必要があります。

import pandas as pd

d1 = {"Name": ["Pankaj", "Lisa", "David"], "ID": [1, 2, 3], "Role": ["CEO", "Editor", "Author"]}

df = pd.DataFrame(d1)

# print(df)

df_melted = pd.melt(df, id_vars=["ID"], value_vars=["Name", "Role"], var_name="Attribute", value_name="Value")

print(df_melted)

# unmelting using pivot()

df_unmelted = df_melted.pivot(index='ID', columns='Attribute')

print(df_unmelted)

出力:

   ID Attribute   Value
0   1      Name  Pankaj
1   2      Name    Lisa
2   3      Name   David
3   1      Role     CEO
4   2      Role  Editor
5   3      Role  Author

            Value        
Attribute    Name    Role
ID                       
1          Pankaj     CEO
2            Lisa  Editor
3           David  Author

溶けていないDataFrameの値は元のDataFrameと同じです。ただし、列とインデックスにはいくつかの小さな変更が必要です。これにより、元のデータフレームと完全に同じになります。

df_unmelted = df_unmelted['Value'].reset_index()
df_unmelted.columns.name = None
print(df_unmelted)

出力:

   ID    Name    Role
0   1  Pankaj     CEO
1   2    Lisa  Editor
2   3   David  Author

参考: パンダのmelt()関数のAPIドキュメント

コメントを残す 0

Your email address will not be published. Required fields are marked *


广告
広告は10秒後に閉じます。
bannerAds