最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Pandas透視表(pivot_table)詳解

 更新時(shí)間:2019年07月22日 15:10:24   作者:多一點(diǎn)  
這篇文章主要介紹了Pandas透視表(pivot_table)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

介紹

也許大多數(shù)人都有在Excel中使用數(shù)據(jù)透視表的經(jīng)歷,其實(shí)Pandas也提供了一個(gè)類似的功能,名為pivot_table。雖然pivot_table非常有用,但是我發(fā)現(xiàn)為了格式化輸出我所需要的內(nèi)容,經(jīng)常需要記住它的使用語法。所以,本文將重點(diǎn)解釋pandas中的函數(shù)pivot_table,并教大家如何使用它來進(jìn)行數(shù)據(jù)分析。

如果你對(duì)這個(gè)概念不熟悉,wikipedia上對(duì)它做了詳細(xì)的解釋。順便說一下,你知道微軟為PivotTable(透視表)注冊(cè)了商標(biāo)嗎?其實(shí)以前我也不知道。不用說,下面我將討論的透視表并不是PivotTable。

作為一個(gè)額外的福利,我創(chuàng)建了一個(gè)總結(jié)pivot_table的簡(jiǎn)單備忘單。你可以在本文的最后找到它,我希望它能夠?qū)δ阌兴鶐椭H绻鼛偷搅四?,?qǐng)告訴我。

數(shù)據(jù)

使用pandas中pivot_table的一個(gè)挑戰(zhàn)是,你需要確保你理解你的數(shù)據(jù),并清楚地知道你想通過透視表解決什么問題。其實(shí),雖然pivot_table看起來只是一個(gè)簡(jiǎn)單的函數(shù),但是它能夠快速地對(duì)數(shù)據(jù)進(jìn)行強(qiáng)大的分析。

在本文中,我將會(huì)跟蹤一個(gè)銷售渠道(也稱為漏斗)?;镜膯栴}是,一些銷售周期很長(zhǎng)(可以想一下“企業(yè)軟件”、“資本設(shè)備”等),而管理者想更詳細(xì)地了解它一整年的情況。

典型的問題包括:

  • 本渠道收入是多少?
  • 渠道的產(chǎn)品是什么?
  • 誰在什么階段有什么產(chǎn)品?
  • 我們年底前結(jié)束交易的可能性有多大?

很多公司將會(huì)使用CRM工具或者其他銷售使用的軟件來跟蹤此過程。雖然他們可能擁有有效的工具對(duì)數(shù)據(jù)進(jìn)行分析,但肯定有人需要將數(shù)據(jù)導(dǎo)出到Excel,并使用一個(gè)透視表工具來總結(jié)這些數(shù)據(jù)。

使用Pandas透視表將是一個(gè)不錯(cuò)的選擇,應(yīng)為它有以下優(yōu)點(diǎn):

  • 更快(一旦設(shè)置之后)
  • 自行說明(通過查看代碼,你將知道它做了什么)
  • 易于生成報(bào)告或電子郵件
  • 更靈活,因?yàn)槟憧梢远x定制的聚合函數(shù)

Read in the data

首先,讓我們搭建所需的環(huán)境。

如果你想跟隨我繼續(xù)下去,那么可以下載這個(gè)Excel文件。

import pandas as pd

import numpy as np

版本提醒

因?yàn)镻ivot_table API已經(jīng)隨著時(shí)間有所改變,所以為了使本文中示例代碼能夠正常工作,請(qǐng)確保你安裝了最近版本的Pandas(>0.15)。本文示例還用到了category數(shù)據(jù)類型,而它也需要確保是最近版本。

首先,將我們銷售渠道的數(shù)據(jù)讀入到數(shù)據(jù)幀中。

df = pd.read_excel("../in/sales-funnel.xlsx")

df.head()

 

為方便起見,我們將上表中“Status”列定義為category,并按我們想要的查看方式設(shè)置順序。

其實(shí),并不嚴(yán)格要求這樣做,但這樣做能夠在分析數(shù)據(jù)的整個(gè)過程中,幫助我們保持所想要的順序。

df["Status"] = df["Status"].astype("category")

df["Status"].cat.set_categories(["won","pending","presented","declined"],inplace=True)

處理數(shù)據(jù)

既然我們建立數(shù)據(jù)透視表,我覺得最容易的方法就是一步一個(gè)腳印地進(jìn)行。添加項(xiàng)目和檢查每一步來驗(yàn)證你正一步一步得到期望的結(jié)果。為了查看什么樣的外觀最能滿足你的需要,就不要害怕處理順序和變量的繁瑣。

最簡(jiǎn)單的透視表必須有一個(gè)數(shù)據(jù)幀和一個(gè)索引。在本例中,我們將使用“Name(名字)”列作為我們的索引。

pd.pivot_table(df,index=["Name"])

此外,你也可以有多個(gè)索引。實(shí)際上,大多數(shù)的pivot_table參數(shù)可以通過列表獲取多個(gè)值。

pd.pivot_table(df,index=["Name","Rep","Manager"])

這樣很有趣但并不是特別有用。我們可能想做的是通過將“Manager”和“Rep”設(shè)置為索引來查看結(jié)果。要實(shí)現(xiàn)它其實(shí)很簡(jiǎn)單,只需要改變索引就可以。

pd.pivot_table(df,index=["Manager","Rep"])

可以看到,透視表比較智能,它已經(jīng)開始通過將“Rep”列和“Manager”列進(jìn)行對(duì)應(yīng)分組,來實(shí)現(xiàn)數(shù)據(jù)聚合和總結(jié)。那么現(xiàn)在,就讓我們共同看一下數(shù)據(jù)透視表可以為我們做些什么吧。

為此,“Account”和“Quantity”列對(duì)于我們來說并沒什么用。所以,通過利用“values”域顯式地定義我們關(guān)心的列,就可以實(shí)現(xiàn)移除那些不關(guān)心的列。

pd.pivot_table(df,index=["Manager","Rep"],values=["Price"])

“Price”列會(huì)自動(dòng)計(jì)算數(shù)據(jù)的平均值,但是我們也可以對(duì)該列元素進(jìn)行計(jì)數(shù)或求和。要添加這些功能,使用aggfunc和np.sum就很容易實(shí)現(xiàn)。

pd.pivot_table(df,index=["Manager","Rep"],values=["Price"],aggfunc=np.sum)

aggfunc可以包含很多函數(shù),下面就讓我們嘗試一種方法,即使用numpy中的函數(shù)mean和len來進(jìn)行計(jì)數(shù)。

pd.pivot_table(df,index=["Manager","Rep"],values=["Price"],aggfunc=[np.mean,len])

如果我們想通過不同產(chǎn)品來分析銷售情況,那么變量“columns”將允許我們定義一個(gè)或多個(gè)列。

列vs.值

我認(rèn)為pivot_table中一個(gè)令人困惑的地方是“columns(列)”和“values(值)”的使用。記住,變量“columns(列)”是可選的,它提供一種額外的方法來分割你所關(guān)心的實(shí)際值。然而,聚合函數(shù)aggfunc最后是被應(yīng)用到了變量“values”中你所列舉的項(xiàng)目上。

pd.pivot_table(df,index=["Manager","Rep"],values=["Price"],

        columns=["Product"],aggfunc=[np.sum])

然而,非數(shù)值(NaN)有點(diǎn)令人分心。如果想移除它們,我們可以使用“fill_value”將其設(shè)置為0。

pd.pivot_table(df,index=["Manager","Rep"],values=["Price"],

        columns=["Product"],aggfunc=[np.sum],fill_value=0)

其實(shí),我覺得添加“Quantity”列將對(duì)我們有所幫助,所以將“Quantity”添加到“values”列表中。

pd.pivot_table(df,index=["Manager","Rep"],values=["Price","Quantity"],

        columns=["Product"],aggfunc=[np.sum],fill_value=0)

有趣的是,你可以將幾個(gè)項(xiàng)目設(shè)置為索引來獲得不同的可視化表示。下面的代碼中,我們將“Product”從“columns”中移除,并添加到“index”變量中。

pd.pivot_table(df,index=["Manager","Rep","Product"],

        values=["Price","Quantity"],aggfunc=[np.sum],fill_value=0)

對(duì)于這個(gè)數(shù)據(jù)集,這種顯示方式看起來更有意義。不過,如果我想查看一些總和數(shù)據(jù)呢?“margins=True”就可以為我們實(shí)現(xiàn)這種功能。

pd.pivot_table(df,index=["Manager","Rep","Product"],

        values=["Price","Quantity"],

        aggfunc=[np.sum,np.mean],fill_value=0,margins=True)

 

下面,讓我們以更高的管理者角度來分析此渠道。根據(jù)我們前面對(duì)category的定義,注意現(xiàn)在“Status”是如何排序的。

pd.pivot_table(df,index=["Manager","Status"],values=["Price"],

        aggfunc=[np.sum],fill_value=0,margins=True)

一個(gè)很方便的特性是,為了對(duì)你選擇的不同值執(zhí)行不同的函數(shù),你可以向aggfunc傳遞一個(gè)字典。不過,這樣做有一個(gè)副作用,那就是必須將標(biāo)簽做的更加簡(jiǎn)潔才行。

pd.pivot_table(df,index=["Manager","Status"],columns=["Product"],values=["Quantity","Price"],

        aggfunc={"Quantity":len,"Price":np.sum},fill_value=0)

此外,你也可以提供一系列的聚合函數(shù),并將它們應(yīng)用到“values”中的每個(gè)元素上。

table = pd.pivot_table(df,index=["Manager","Status"],columns=["Product"],values=["Quantity","Price"],

        aggfunc={"Quantity":len,"Price":[np.sum,np.mean]},fill_value=0)

table

 

也許,同一時(shí)間將這些東西全都放在一起會(huì)有點(diǎn)令人望而生畏,但是一旦你開始處理這些數(shù)據(jù),并一步一步地添加新項(xiàng)目,你將能夠領(lǐng)略到它是如何工作的。我一般的經(jīng)驗(yàn)法則是,一旦你使用多個(gè)“grouby”,那么你需要評(píng)估此時(shí)使用透視表是否是一種好的選擇。

高級(jí)透視表過濾

一旦你生成了需要的數(shù)據(jù),那么數(shù)據(jù)將存在于數(shù)據(jù)幀中。所以,你可以使用自定義的標(biāo)準(zhǔn)數(shù)據(jù)幀函數(shù)來對(duì)其進(jìn)行過濾。

如果你只想查看一個(gè)管理者(例如Debra Henley)的數(shù)據(jù),可以這樣:

table.query('Manager == ["Debra Henley"]')

我們可以查看所有的暫停(pending)和成功(won)的交易,代碼如下所示:

table.query('Status == ["pending","won"]')

這是pivot_table中一個(gè)很強(qiáng)大的特性,所以一旦你得到了你所需要的pivot_table格式的數(shù)據(jù),就不要忘了此時(shí)你就擁有了pandas的強(qiáng)大威力。

The full notebook is available if you would like to save it as a reference.

如果你想將其保存下來作為參考,那么這里提供完整的筆記

備忘單

為了試圖總結(jié)所有這一切,我已經(jīng)創(chuàng)建了一個(gè)備忘單,我希望它能夠幫助你記住如何使用pandas的pivot_table。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python基于PyQt5和openpyxl實(shí)現(xiàn)Excel單元格合并工具

    Python基于PyQt5和openpyxl實(shí)現(xiàn)Excel單元格合并工具

    本文介紹了基于PyQt5和openpyxl的圖形化界面工具,用于合并Excel文件中指定列的相同內(nèi)容單元格,工具提供了文件選擇、工作表選擇、合并設(shè)置、合并執(zhí)行和輸出控制等功能,需要的朋友可以參考下
    2025-11-11
  • 正則給header的冒號(hào)兩邊參數(shù)添加單引號(hào)(Python請(qǐng)求用)

    正則給header的冒號(hào)兩邊參數(shù)添加單引號(hào)(Python請(qǐng)求用)

    這篇文章主要介紹了正則給header的冒號(hào)兩邊參數(shù)添加單引號(hào)(Python請(qǐng)求用)的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python使用FTP上傳文件的實(shí)現(xiàn)示例

    Python使用FTP上傳文件的實(shí)現(xiàn)示例

    本文主要介紹了Python使用FTP上傳文件的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • python如何獲取列表中每個(gè)元素的下標(biāo)位置

    python如何獲取列表中每個(gè)元素的下標(biāo)位置

    這篇文章主要介紹了python如何獲取列表中每個(gè)元素的下標(biāo)位置,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 在Mac上刪除自己安裝的Python方法

    在Mac上刪除自己安裝的Python方法

    今天小編就為大家分享一篇在Mac上刪除自己安裝的Python方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Dataframe的行名及列名排序問題

    Dataframe的行名及列名排序問題

    這篇文章主要介紹了Dataframe的行名及列名排序問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • springboot配置文件抽離 git管理統(tǒng) 配置中心詳解

    springboot配置文件抽離 git管理統(tǒng) 配置中心詳解

    在本篇文章里小編給大家整理的是關(guān)于springboot配置文件抽離 git管理統(tǒng) 配置中心的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2019-09-09
  • 用python寫PDF轉(zhuǎn)換器的實(shí)現(xiàn)

    用python寫PDF轉(zhuǎn)換器的實(shí)現(xiàn)

    這篇文章主要介紹了用python寫PDF轉(zhuǎn)換器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 在pytorch 中計(jì)算精度、回歸率、F1 score等指標(biāo)的實(shí)例

    在pytorch 中計(jì)算精度、回歸率、F1 score等指標(biāo)的實(shí)例

    今天小編就為大家分享一篇在pytorch 中計(jì)算精度、回歸率、F1 score等指標(biāo)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 在Python中將元組轉(zhuǎn)換為列表的方法詳解

    在Python中將元組轉(zhuǎn)換為列表的方法詳解

    這兩種Python 數(shù)據(jù)類型看起來很相似,但在上下文中卻有不同的用法,元組和列表之間的主要區(qū)別在于它們的可變性,僅當(dāng)您需要修改元素時(shí)才會(huì)將元組轉(zhuǎn)換為列表,本文現(xiàn)在我們將深入研究將元組轉(zhuǎn)換為列表的不同方法,需要的朋友可以參考下
    2023-09-09

最新評(píng)論

图木舒克市| 平邑县| 独山县| 新竹市| 澎湖县| 保定市| 苏州市| 崇义县| 桂林市| 海城市| 南投市| 河东区| 义乌市| 广南县| 莫力| 正定县| 六盘水市| 齐齐哈尔市| 鄂州市| 鹤庆县| 得荣县| 江门市| 芜湖县| 古交市| 佛学| 昌江| 北碚区| 通道| 登封市| 永和县| 抚州市| 遂川县| 阿鲁科尔沁旗| 滨海县| 平凉市| 乌苏市| 红安县| 合阳县| 收藏| 合肥市| 项城市|