首页 > 后端开发 > Python教程 > 如何融化 Pandas DataFrame 以及何时使用此技术?

如何融化 Pandas DataFrame 以及何时使用此技术?

Barbara Streisand
发布: 2024-12-29 00:52:11
原创
455 人浏览过

How to Melt a Pandas DataFrame and When to Use This Technique?

融化 Pandas DataFrames

什么是 Melt?

融化 pandas DataFrame 涉及从宽格式重构它,其中每一列代表一个变量,长格式,其中每行代表一个观察值,每列代表一个特征值

如何熔化 DataFrame

要熔化 DataFrame,请使用 pd.melt() 函数,并指定以下参数:

  • id_vars:列保留为唯一标识符(通常是主键或索引)。
  • value_vars:要熔化的列(转换为行)。如果未指定,则融化不在 id_vars 中的所有列。
  • var_name:将包含原始列名称的列的名称。
  • value_name:将包含原始列的列的名称值。

例如,融化以下内容DataFrame:

import pandas as pd

df = pd.DataFrame({'Name': ['Bob', 'John', 'Foo', 'Bar', 'Alex', 'Tom'],
                   'Math': ['A+', 'B', 'A', 'F', 'D', 'C'],
                   'English': ['C', 'B', 'B', 'A+', 'F', 'A']})
登录后复制

我们可以使用:

df_melted = pd.melt(df, id_vars=['Name'], value_vars=['Math', 'English'])
登录后复制

这将输出熔化的DataFrame:

   Name  variable  value
0   Bob    Math     A+
1   John    Math      B
2   Foo    Math      A
3   Bar    Math      F
4   Alex    Math      D
5   Tom    Math      C
6   Bob  English      C
7   John  English      B
8   Foo   English      B
9   Bar  English     A+
10  Alex  English      F
11  Tom   English      A
登录后复制

何时使用Melt

当您需要执行以下操作时,熔化非常有用:

  • 变换宽幅将数据转换为适合绘图或可视化的格式。
  • 为需要特定数据格式的机器学习模型准备数据。
  • 按唯一标识符对观察结果进行分组,并对融合的数据执行聚合或转换。

示例场景

问题1:将下面的 DataFrame 转换为融合格式,包含名称、年龄、主题和成绩列。

df = pd.DataFrame({'Name': ['Bob', 'John', 'Foo', 'Bar', 'Alex', 'Tom'],
                   'Math': ['A+', 'B', 'A', 'F', 'D', 'C'],
                   'English': ['C', 'B', 'B', 'A+', 'F', 'A']})
登录后复制
df_melted = pd.melt(df, id_vars=['Name', 'Age'], var_name='Subject', value_name='Grade')

print(df_melted)
登录后复制

输出:

   Name  Age Subject Grade
0   Bob   13  English      C
1  John   16  English      B
2   Foo   16  English      B
3   Bar   15  English     A+
4  Alex   17  English      F
5   Tom   12  English      A
6   Bob   13     Math     A+
7  John   16     Math      B
8   Foo   16     Math      A
9   Bar   15     Math      F
10 Alex   17     Math      D
11  Tom   12     Math      C
登录后复制

问题 2:过滤问题 1 中融化的 DataFrame 以仅包含数学

df_melted_math = pd.melt(df, id_vars=['Name', 'Age'], value_vars=['Math'], var_name='Subject', value_name='Grade')

print(df_melted_math)
登录后复制

输出:

   Name  Age Subject Grade
0   Bob   13    Math     A+
1  John   16    Math      B
2   Foo   16    Math      A
3   Bar   15    Math      F
4  Alex   17    Math      D
5   Tom   12    Math      C
登录后复制

问题 3:按年级对融化的 DataFrame 进行分组,并计算每个 DataFrame 的唯一名称和主题成绩。

df_melted_grouped = df_melted.groupby(['Grade']).agg({'Name': ', '.join, 'Subject': ', '.join}).reset_index()

print(df_melted_grouped)
登录后复制

输出:

  Grade             Name                Subjects
0     A       Foo, Tom           Math, English
1    A+         Bob, Bar           Math, English
2     B  John, John, Foo  Math, English, English
3     C         Bob, Tom           English, Math
4     D             Alex                    Math
5     F        Bar, Alex           Math, English
登录后复制

问题 4:将问题 1 中融化的 DataFrame 解回其原始状态格式。

df_unmelted = df_melted.pivot_table(index=['Name', 'Age'], columns='Subject', values='Grade', aggfunc='first').reset_index()

print(df_unmelted)
登录后复制

输出:

   Name  Age English Math
0   Alex   17       F    D
1   Bar   15      A+    F
2   Bob   13       C   A+
3   Foo   16       B    A
4  John   16       B    B
5   Tom   12       A    C
登录后复制

问题 5:按名称对问题 1 中融合的 DataFrame 进行分组,并按逗号。

df_melted_by_name = df_melted.groupby('Name').agg({'Subject': ', '.join, 'Grade': ', '.join}).reset_index()

print(df_melted_by_name)
登录后复制

输出:

   Name        Subject Grades
0  Alex  Math, English   D, F
1   Bar  Math, English  F, A+
2   Bob  Math, English  A+, C
3   Foo  Math, English   A, B
4  John  Math, English   B, B
5   Tom  Math, English   C, A
登录后复制

问题 6:将整个 DataFrame 合并为一列值,另一列包含原始列名称.

df_melted_full = df.melt(ignore_index=False)

print(df_melted_full)
登录后复制

输出:

   Name  Age  variable  value
0   Bob   13    Math     A+
1  John   16    Math      B
2   Foo   16    Math      A
3   Bar   15    Math      F
4  Alex   17    Math      D
5   Tom   12    Math      C
6   Bob   13  English      C
7  John   16  English      B
8   Foo   16  English      B
9   Bar   15  English     A+
10 Alex   17  English      F
11  Tom   12  English      A
登录后复制

以上是如何融化 Pandas DataFrame 以及何时使用此技术?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板