融化 Pandas DataFrame 涉及将数据从宽格式转换为长格式。当出于分析、可视化或其他目的操作数据时,这非常有用。让我们通过示例问题及其相应的解决方案深入研究各种熔化场景:
问题:如何熔化 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')
问题: 如何融合问题 1 中的 DataFrame 并过滤掉“英语”列?
解决方案:
在 df.melt() 中使用 value_vars 来指定要熔化的列。在本例中,仅选择 ['Math']:
pd.melt(df, id_vars=['Name', 'Age'], value_vars='Math', var_name='Subject', value_name='Grade')
问题: 如何对熔化的数据进行排序问题 1 中的数据按分数排列,并对学生进行分组名字?
解决方案:
在融化的 DataFrame 上使用 .groupby() 和 .agg() 按 'Grade' 进行分组,并将名称和主题连接成逗号- 分隔字符串:
melted_df.groupby('Grade', as_index=False).agg(", ".join)
问题:如何解开已熔化的 DataFrame?
解决方案:
使用 DataFrame.pivot_table () 来解冻 DataFrame。指定值、索引和列。
melted_df.pivot_table('Grades', ['Name', 'Age'], 'Subject', aggfunc='first').reset_index().droplevel(level=0, axis=1)
问题: 如何按名称和分隔列对 DataFrame 进行分组将科目和成绩分开逗号?
解决方案:
融化 DataFrame 并使用 .groupby() 和 .agg() 连接科目和成绩:
pd.melt(df, id_vars=['Name'], var_name='Subject', value_name='Grade').groupby('Name', as_index=False).agg(", ".join)
问题:如何融合 DataFrame 中的所有列?
解决方案:
使用 df.stack( ).reset_index() 转置DataFrame:
pd.melt(df, id_vars=None, var_name='Column', value_name='Value')
这些解决方案展示了熔化和未熔化 pandas DataFrame 的多功能性,可以出于各种目的操作数据。
以上是如何融化和取消融化 Pandas DataFrame 以进行数据操作?的详细内容。更多信息请关注PHP中文网其他相关文章!