Pandas 使用 pivot() 函数熔化()和解除熔化

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_namevalue_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

Published At
Categories with 技术
Tagged with
comments powered by Disqus