Pandas实战100例 | 案例 9: 数据重塑 - `pivot` 和 `melt`

发布时间:2024年01月12日

案例 9: 数据重塑 - pivotmelt

知识点讲解

在 Pandas 中,pivotmelt 是用于数据重塑的两个强大工具。pivot 可以帮助你重新排列数据的格式,使其更加适合分析。而 melt 是进行“熔化”操作的,它可以将数据从宽格式转换为长格式。

  • pivot 用于创建一个新的派生表格,其中一列的值会成为多个列的标题。
  • melt 将 DataFrame 从宽格式转换为长格式,通常用于将多列合并成两列,一列存储变量名,另一列存储值。
示例代码

使用 pivot

# 原始数据
data = {'Date': ['2023-01-01', '2023-01-02', '2023-01-03'],
        'Type': ['A', 'B', 'C'],
        'Value': [100, 200, 300]}
df = pd.DataFrame(data)

# 使用 pivot
pivot_df = df.pivot(index='Date', columns='Type', values='Value')
print(pivot_df)

这段代码演示了如何使用 pivot 方法。我们首先创建了一个包含日期、类型和值的简单 DataFrame。然后,我们使用 pivot 方法,将 Date 列作为索引,Type 列的唯一值作为新的列,并以 Value 列的值填充这些新列。

使用 melt

# 使用 melt
melted_df = df.melt(id_vars=['Date'], value_vars=['Type', 'Value'])
print(melted_df)

这段代码展示了 melt 方法的使用。我们将 Date 列作为标识变量列(保持不变),然后将 TypeValue 列“熔化”成两列,其中一列存储了原始列名(Type, Value),另一列存储了相应的值。

数据重塑是数据预处理中的一个关键步骤,可以大大改善数据的可读性和适应性。

案例 9: 数据重塑 - pivotmelt(续)

示例代码运行结果

使用 pivot

import pandas as pd

# 准备数据和示例代码的运行结果,用于案例 9

# 原始数据
data = {'Date': ['2023-01-01', '2023-01-02', '2023-01-03'],
        'Type': ['A', 'B', 'C'],
        'Value': [100, 200, 300]}
df = pd.DataFrame(data)

# 使用 pivot
pivot_df = df.pivot(index='Date', columns='Type', values='Value')

# 使用 melt
melted_df = df.melt(id_vars=['Date'], value_vars=['Type', 'Value'])

pivot_df, melted_df


运行结果:

Type            A      B      C
Date                           
2023-01-01  100.0    NaN    NaN
2023-01-02    NaN  200.0    NaN
2023-01-03    NaN    NaN  300.0

这个结果显示了 pivot 方法如何将原始数据转换为新格式,其中日期作为索引,不同的 Type 值(A, B, C)作为列标题。

使用 melt

melted_df = df.melt(id_vars=['Date'], value_vars=['Type', 'Value'])
print(melted_df)

运行结果:

         Date variable value
0  2023-01-01     Type     A
1  2023-01-02     Type     B
2  2023-01-03     Type     C
3  2023-01-01    Value   100
4  2023-01-02    Value   200
5  2023-01-03    Value   300

在这个结果中,melt 方法将数据转换为长格式,其中 Date 列保持不变,而 TypeValue 列的内容被合并到两个新列中。

通过这样的数据重塑操作,你可以根据需要将数据结构从宽格式转换为长格式,或反之,以适应不同的分析需求。

文章来源:https://blog.csdn.net/PoGeN1/article/details/135533634
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。