融化 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中文網其他相關文章!