首頁 > 後端開發 > Python教學 > 如何融化 Pandas DataFrame 以及何時使用此技術?

如何融化 Pandas DataFrame 以及何時使用此技術?

Barbara Streisand
發布: 2024-12-29 00:52:11
原創
456 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板