首页 >后端开发 >Python教程 >如何融化和取消融化 Pandas DataFrame 以进行数据操作?

如何融化和取消融化 Pandas DataFrame 以进行数据操作?

Susan Sarandon
Susan Sarandon原创
2024-12-25 21:19:14208浏览

How Do I Melt and Unmelt Pandas DataFrames for Data Manipulation?

如何融化 Pandas DataFrame?

问题陈述:

融化 Pandas DataFrame 涉及将数据从宽格式转换为长格式。当出于分析、可视化或其他目的操作数据时,这非常有用。让我们通过示例问题及其相应的解决方案深入研究各种熔化场景:

问题 1:转换为长格式

问题:如何熔化 DataFrame 以便以下格式是

    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

解决方案:

要熔化 DataFrame,请使用 df.melt()。指定 id_vars(保留原始形式的列)以及新列名称的 var_name 和 value_name:

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

问题 2:在熔化期间过滤列

问题: 如何融合问题 1 中的 DataFrame 并过滤掉“英语”列?

解决方案:

在 df.melt() 中使用 value_vars 来指定要熔化的列。在本例中,仅选择 ['Math']:

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

问题 3:对熔化的数据进行排序和分组

问题: 如何对熔化的数据进行排序问题 1 中的数据按分数排列,并对学生进行分组名字?

解决方案:

在融化的 DataFrame 上使用 .groupby() 和 .agg() 按 'Grade' 进行分组,并将名称和主题连接成逗号- 分隔字符串:

melted_df.groupby('Grade', as_index=False).agg(", ".join)

问题 4:解熔已熔解DataFrame

问题:如何解开已熔化的 DataFrame?

解决方案:

使用 DataFrame.pivot_table () 来解冻 DataFrame。指定值、索引和列。

melted_df.pivot_table('Grades', ['Name', 'Age'], 'Subject', aggfunc='first').reset_index().droplevel(level=0, axis=1)

问题 5:按名称分组和分隔列

问题: 如何按名称和分隔列对 DataFrame 进行分组将科目和成绩分开逗号?

解决方案:

融化 DataFrame 并使用 .groupby() 和 .agg() 连接科目和成绩:

pd.melt(df, id_vars=['Name'], var_name='Subject', value_name='Grade').groupby('Name', as_index=False).agg(", ".join)

问题 6:将所有列熔化为值

问题:如何融合 DataFrame 中的所有列?

解决方案:

使用 df.stack( ).reset_index() 转置DataFrame:

pd.melt(df, id_vars=None, var_name='Column', value_name='Value')

这些解决方案展示了熔化和未熔化 pandas DataFrame 的多功能性,可以出于各种目的操作数据。

以上是如何融化和取消融化 Pandas DataFrame 以进行数据操作?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn