當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python Pandas pivot方法用法及代碼示例


Pandas pivot(~)方法將輸入DataFrame轉換為所謂的數據透視表。請檢查下麵的示例以了解數據透視表是什麽。

參數

1.index | stringobject | optional

將成為結果數據透視表索引的列的標簽。

2. columns | stringobject

其值將成為新列標簽的列的標簽。

3. values | stringobjectlist | optional

其值將填充生成的數據透視表的列的標簽。

警告

如果您希望聚合values(例如計算平均值、計數等),請改用 pivot_table(~)

返回值

代表數據透視表的新 DataFrame

例子

基本用法

考慮以下關於一段時間內人們身高的DataFrame:

df = pd.DataFrame({"name":["alex","bob","alex","bob","cathy"], "year":[2012,2012,2013,2013,2013], "height":[150,160,160,170,160]})
df



   name   year  height
0  alex   2012   150
1  bob    2012   160
2  alex   2013   160
3  bob    2013   170
4  cathy  2013   160

創建一個數據透視表使用這個 DataFrame :

pd.pivot(df, index="name", columns="year", values="height")



year   2012   2013
name  
alex   150.0  160.0
bob    160.0  170.0
cathy  NaN    160.0

在此,請注意以下事項:

  • name 列成為新索引

  • year 列的值成為新的列標簽

  • height 列的值用於填充新的 DataFrame

  • 未找到的值(例如 2012 中 Cathy 的高度)導致 NaN

多個值

考慮以下 DataFrame :

df = pd.DataFrame({"name":["alex","bob","alex","bob","cathy"], "year":[2012,2012,2013,2013,2013], "height":[150,160,160,170,160], "weight":[50,60,60,70,60]})
df



   name   year  height  weight
0  alex   2012   150      50
1  bob    2012   160      60
2  alex   2013   160      60
3  bob    2013   170      70
4  cathy  2013   160      60

在這裏,除了 height 列之外,我們還有一個 weight 列。

要使用這兩列生成數據透視表,請傳遞 values 的列表,如下所示:

pd.pivot(df, index="name", columns="year", values=["height","weight"])



       height          weight
year   2012    2013    2012    2013
name    
alex   150.0   160.0   50.0    60.0
bob    160.0   170.0   60.0    70.0
cathy  NaN     160.0   NaN     60.0

處理ValueError

考慮以下 DataFrame :

df = pd.DataFrame({"name":["alex","alex","bob"], "year":[2012,2012,2013], "height":[150,160,160]})
df



   name  year  height
0  alex  2012  150
1  alex  2012  160
2  bob   2013  160

在這裏,我們有兩個名為 alex 的人,他們的身高均在 2012 中獲取。

創建數據透視表會產生 ValueError,如下所示:

pd.pivot(df, index="name", columns="year", values="height")



ValueError: Index contains duplicate entries, cannot reshape

為了理解為什麽會發生這種情況,讓我們暫時將第二個 alex 重命名為 * ,並創建數據透視表:

df = pd.DataFrame({"name":["alex","*","bob"], "year":[2012,2012,2013], "height":[150,160,160]})
pd.pivot(df, index="name", columns="year", values="height")



year   2012    2013
name    
*      160.0   NaN
alex   150.0   NaN
bob    NaN     160.0

如果 *alex ,那麽很容易看到結果索引將包含重複值,這在 Pandas 中是不希望的。這就是 ValueError 的原因。

那麽,此 ValueError 的修複方法是確保新索引列中不存在重複值。您可以使用 loc iloc 等屬性來更新各個條目以避免重複。

相關用法


注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 Pandas | pivot method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。