首頁 >後端開發 >Python教學 >如何融化和取消融化 Pandas DataFrame 以進行資料操作?

如何融化和取消融化 Pandas DataFrame 以進行資料操作?

Susan Sarandon
Susan Sarandon原創
2024-12-25 21:19:14240瀏覽

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