📜  使用 Melt 和 Unmelt 重塑 Pandas 数据帧(1)

📅  最后修改于: 2023-12-03 15:22:14.363000             🧑  作者: Mango

使用 Melt 和 Unmelt 重塑 Pandas 数据帧

概述

Pandas 是 Python 中非常流行的数据处理库之一。在 Pandas 中,使用数据帧(DataFrame)存储和处理数据。数据帧可以看作是类似于电子表格的一种数据结构,其中每一列可以是不同的数据类型。Pandas 提供了许多方法来操作数据帧,其中包括重塑数据帧的功能。

重塑数据帧是将数据帧从一种形式转换为另一种形式的过程。这个过程通常涉及到将数据帧的行和列进行重新排列、合并或拆分。在 Pandas 中,有两个重要的函数可以用来重塑数据帧:meltunmelt

使用 Melt 重塑数据帧

melt 函数操作的目标是将数据帧从“宽格式”转换为“长格式”。所谓的“宽格式”是指每一列代表了不同的变量,而“长格式”是指所有的变量都存储在同一列中,并且使用一个额外的列来区分不同变量的情况。

假设我们有一个数据帧,其中有三列:日期、早餐和午餐。每一行都代表了一个人在某个日期吃了什么样的饭菜。在这种情况下,我们可以使用 melt 函数将数据帧从宽格式转换为长格式:

import pandas as pd

df_wide = pd.DataFrame({
    "date": ["2022-01-01", "2022-01-02", "2022-01-03"],
    "breakfast": ["eggs", "toast", "bacon"],
    "lunch": ["salad", "soup", "sandwich"]
})

df_long = pd.melt(df_wide, id_vars=["date"], value_vars=["breakfast", "lunch"], var_name="meal", value_name="food")

print(df_long)

输出结果如下:

          date       meal     food
0   2022-01-01  breakfast     eggs
1   2022-01-02  breakfast    toast
2   2022-01-03  breakfast    bacon
3   2022-01-01      lunch    salad
4   2022-01-02      lunch     soup
5   2022-01-03      lunch  sandwich

melt 函数接受三个参数:

  • id_vars:指定需要保留的列;
  • value_vars:指定需要进行重塑的列;
  • var_name:指定新增列的列名;
  • value_name:指定新增列里的值的列名。

从运行结果可以看出,新数据帧 df_long 有三列:日期、用餐时间和食物。在这个新的数据帧中,每个日期有两行,分别代表了早餐和午餐的食物。

使用 Unmelt 重塑数据帧

melt 函数相反,unmelt 函数操作的目标是将数据帧从“长格式”转换为“宽格式”。在这种情况下,一个额外的列(比如说用餐时间)将变成原数据帧的列名。

假设我们有一个数据帧,其中包含了日期、用餐时间和食物三列。在这个案例中,我们可以使用 unmelt 函数将数据帧从长格式转换为宽格式:

df_wide = df_long.pivot(index="date", columns="meal", values="food").reset_index()

print(df_wide)

输出结果如下:

meal        date breakfast     lunch
0     2022-01-01      eggs     salad
1     2022-01-02     toast      soup
2     2022-01-03     bacon  sandwich

在这个新的数据帧中,每一列代表了不同的用餐时间,而每一行代表了不同的日期。可以发现,在这个新数据帧中,我们并没有用到传统的列名。相反,用餐时间成为了列名,而日期成为了索引。

总结

在 Pandas 中,使用 meltunmelt 函数可以轻松地重塑数据帧。这些函数提供了一种从不同角度解析数据帧的方式,使我们可以更方便地对数据进行研究和分析。