熊猫的melt()函数和通过pivot()函数进行unmelt

熊猫的melt()函数用于将DataFrame的格式从宽变为长。它用于创建一个特定格式的DataFrame对象,其中一个或多个列充当标识符。所有剩余的列都被视为值并展开到行轴上,只保留两列 – 变量和数值。

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()函数跳过列

在下一个示例中,不需要使用源DataFrame中的所有行。让我们跳过“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. 使用 pivot() 函数将未融合的 DataFrame 进行重塑。

我们可以使用pivot()函数来取消融合DataFrame对象并获取原始DataFrame。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

参考:pandas melt() API 文档

广告
将在 10 秒后关闭
bannerAds