Pandas melt() 函数用于将 DataFrame 格式从宽变为长,用于创建一个特定格式的 DataFrame 对象,其中一个或多个列作为标识符工作。
(示例)
使用melt()函数在通过一个示例时更清楚。
1import pandas as pd
2
3d1 = {"Name": ["Pankaj", "Lisa", "David"], "ID": [1, 2, 3], "Role": ["CEO", "Editor", "Author"]}
4
5df = pd.DataFrame(d1)
6
7print(df)
8
9df_melted = pd.melt(df, id_vars=["ID"], value_vars=["Name", "Role"])
10
11print(df_melted)
输出:
1Name ID Role
20 Pankaj 1 CEO
31 Lisa 2 Editor
42 David 3 Author
5
6 ID variable value
70 1 Name Pankaj
81 2 Name Lisa
92 3 Name David
103 1 Role CEO
114 2 Role Editor
125 3 Role Author
我们可以通过var_name
和value_name
参数来更改变量
和值
的列名。
1df_melted = pd.melt(df, id_vars=["ID"], value_vars=["Name", "Role"], var_name="Attribute", value_name="Value")
推荐阅读: [Python Pandas 教程]( / 社区 / 教程 / python-pandas - 模块 - 教程)
多个列为 id_vars
让我们看看当我们通过多个列作为id_vars参数时会发生什么。
1df_melted = pd.melt(df, id_vars=["ID", "Name"], value_vars=["Role"])
2print(df_melted)
输出:
1ID Name variable value
20 1 Pankaj Role CEO
31 2 Lisa Role Editor
42 3 David Role Author
在 melt() 函数中跳过列
您不需要使用源 DataFrame 的所有行,让我们在下一个示例中跳过ID
列。
1df_melted = pd.melt(df, id_vars=["Name"], value_vars=["Role"])
2print(df_melted)
输出:
1Name variable value
20 Pankaj Role CEO
31 Lisa Role Editor
42 David Role Author
使用 Pivot() 函数解析数据框架
我们可以使用 pivot() 函数来解溶一个 DataFrame 对象并获得原始数据框架。 pivot() 函数索引
参数值应与id_vars
值相同。
1import pandas as pd
2
3d1 = {"Name": ["Pankaj", "Lisa", "David"], "ID": [1, 2, 3], "Role": ["CEO", "Editor", "Author"]}
4
5df = pd.DataFrame(d1)
6
7# print(df)
8
9df_melted = pd.melt(df, id_vars=["ID"], value_vars=["Name", "Role"], var_name="Attribute", value_name="Value")
10
11print(df_melted)
12
13# unmelting using pivot()
14
15df_unmelted = df_melted.pivot(index='ID', columns='Attribute')
16
17print(df_unmelted)
输出:
1ID Attribute Value
20 1 Name Pankaj
31 2 Name Lisa
42 3 Name David
53 1 Role CEO
64 2 Role Editor
75 3 Role Author
8
9 Value
10Attribute Name Role
11ID
121 Pankaj CEO
132 Lisa Editor
143 David Author
未溶解的 DataFrame 值与原始 DataFrame 相同,但是,列和索引需要一些微小的更改,以使其完全与原始数据框相同。
1df_unmelted = df_unmelted['Value'].reset_index()
2df_unmelted.columns.name = None
3print(df_unmelted)
输出:
1ID Name Role
20 1 Pankaj CEO
31 2 Lisa Editor
42 3 David Author
此分類上一篇: pandas melt() API Doc