首頁 > 後端開發 > Python教學 > 如何旋轉 Pandas DataFrame:重塑數據的綜合指南?

如何旋轉 Pandas DataFrame:重塑數據的綜合指南?

DDD
發布: 2024-12-25 10:25:09
原創
150 人瀏覽過

How to Pivot a Pandas DataFrame: A Comprehensive Guide to Reshaping Data?

如何對 DataFrame 進行透視?

什麼是透視?

  • 將DataFrame 從long 重塑為格式
  • 允許建立一個新的DataFrame,其中基於一列或多列聚合值

如何進行透視?

  • 透視資料的幾種方法DataFrame:

    • pd.DataFrame.pivot_table
    • pd.DataFramegroupby pd.
    • pd.DataFrame.set_index pd.DataFrame.unstack
    • pd.DataFrame.pivot(較少靈活)
    • pd.crosstab(用於交叉製表)
    • pd.factorize np.bincount(高級,高性能)
    • pd.get_dummies pd.DataFrame.dot(交叉製表)

長格式轉寬格式?

  • 長格式:

    • 每個觀察佔用一行
    • 多列代表不同屬性/測量值
  • 寬格式:

    • 每個觀察佔據一列
    • 多行代表不同的屬性/測量值

範例

問題1:為什麼我會收到 ValueError:索引包含重複條目,無法重塑?

  • 當嘗試旋轉具有重複鍵的DataFrame 時會發生這種情況透視
  • 範例:如果df 有重複的row 和col 條目,並且您使用df.pivot(index ='row', columns='col') 進行透視,您將收到錯誤。

問題 2:如何對 df 進行透視,使 col 值是列,行值是索引,val0 的平均值是值?

  • 使用pd.DataFrame.pivot_table:

    df.pivot_table(values='val0', index='row', columns='col', aggfunc='mean')
    登入後複製
    登入後複製

問題3:如何使缺失值為0 ?

  • 問題3:如何使缺失值為0 ?

    df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc='mean')
    登入後複製
    登入後複製
    問題3:如何使缺失值為0 ?

使用fill_value參數pd.DataFrame.pivot_table:
  • df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc='sum')
    登入後複製
    登入後複製
    問題 4:我可以得到平均值以外的其他內容,例如總和嗎?

使用不同的 aggfunc 參數pd.DataFrame.pivot_table:
  • df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc=[np.size, np.mean])
    登入後複製
    問題 5:我可以一次進行多重聚合嗎?

提供一個列表aggfunc 參數的可調用項pd.DataFrame.pivot_table:
  • df.pivot_table(values=['val0', 'val1'], index='row', columns='col', fill_value=0, aggfunc='mean')
    登入後複製
    6:我可以聚合多個問題6:我可以聚合多個問題6:我可以聚合多個問題6:我可以聚合多個問題6:我可以聚合多個問題6:我可以聚合多個問題6:我可以聚合多個問題6:我可以聚合多個問題6:我可以聚合多個問題6:我可以聚合多個問題6:我可以聚合多個問題6:我可以聚合多個問題值列嗎?

將多個列名稱作為列出值pd.DataFrame.pivot_table:
  • df.pivot_table(values='val0', index=['row', 'item'], columns='col', fill_value=0, aggfunc='mean')
    登入後複製
    問題7:我可以按多列細分嗎?

將多個列名稱作為列表傳遞索引或列pd.DataFrame.pivot_table:
  • df.pivot_table(values='val0', index=['key', 'row'], columns=['item', 'col'], fill_value=0, aggfunc='mean')
    登入後複製
    問題8:或

可以使用索引和列中的多列進行細分pd.DataFrame.pivot_table:
  • 問題9:我可以聚合列和行一起出現的頻率,也稱為「交叉表」嗎? 使用 pd.crosstab:
    df.pivot_table(values='val0', index='row', columns='col', aggfunc='mean')
    登入後複製
    登入後複製

問題 10:如何透過僅旋轉兩列將 DataFrame 從長轉換為寬?

df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc='mean')
登入後複製
登入後複製

問題 11:如何展平倍數資料透視後索引到單一索引?

  • 加入多部分索引作為單一字串:

    df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc='sum')
    登入後複製
    登入後複製

以上是如何旋轉 Pandas DataFrame:重塑數據的綜合指南?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板