python pandas最常用透視表實(shí)現(xiàn)應(yīng)用案例
pandas包實(shí)現(xiàn)透視表的功能
透視表是一種可以對(duì)數(shù)據(jù)動(dòng)態(tài)排布并且分類匯總的表格格式,它在數(shù)據(jù)分析中有著重要的作用和地位。在本文中,我將為你介紹python中如何使用pandas包實(shí)現(xiàn)透視表的功能,以及一些常見的應(yīng)用案例。
導(dǎo)入pandas包
首先需要導(dǎo)入pandas包,它是一個(gè)提供了高性能數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具的python庫(kù),還需要導(dǎo)入numpy包,它是一個(gè)支持多維數(shù)組和矩陣運(yùn)算的python庫(kù)??梢允褂靡韵麓a來(lái)導(dǎo)入這兩個(gè)包:
import pandas as pd import numpy as np
pandas讀取一個(gè)excel文件中的數(shù)據(jù)
接下來(lái),準(zhǔn)備一些數(shù)據(jù)來(lái)演示透視表的功能,可以使用pandas的read_excel函數(shù)來(lái)讀取一個(gè)excel文件中的數(shù)據(jù),也可以使用DataFrame函數(shù)來(lái)創(chuàng)建一個(gè)數(shù)據(jù)框?qū)ο?。例如,可以使用以下代碼來(lái)創(chuàng)建一個(gè)包含了商品名稱、代理商、價(jià)格和時(shí)間的數(shù)據(jù)框:
data = pd.DataFrame({ '商品名稱': ['蘋果', '香蕉', '橘子', '蘋果', '香蕉', '橘子', '蘋果', '香蕉', '橘子'], '代理商': ['張三', '李四', '王五', '張三', '李四', '王五', '張三', '李四', '王五'], '價(jià)格': [10, 5, 8, 12, 6, 9, 11, 7, 10], '時(shí)間': ['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04', '2021-01-05', '2021-01-06', '2021-01-07', '2021-01-08', '2021-01-09'] })
我們可以使用data.head()函數(shù)來(lái)查看數(shù)據(jù)框的前五行:
data.head()
| | 商品名稱 | 代理商 | 價(jià)格 | 時(shí)間 |
| - | ------- | ----- | --- | --------- |
| 0 | 蘋果 | 張三 | 10 | 2021-01-01 |
| 1 | 香蕉 | 李四 | 5 | 2021-01-02 |
| 2 | 橘子 | 王五 | 8 | 2021-01-03 |
| 3 | 蘋果 | 張三 | 12 | 2021-01-04 |
| 4 | 香蕉 | 李四 | 6 | 2021-01-05 |
pivot_table函數(shù)的語(yǔ)法
現(xiàn)在,我們可以使用pandas的pivot_table函數(shù)來(lái)創(chuàng)建一個(gè)透視表。pivot_table函數(shù)的基本語(yǔ)法如下:
pd.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')
其中,data是要進(jìn)行透視表操作的數(shù)據(jù)框?qū)ο?,values是要進(jìn)行聚合運(yùn)算的列名,index是要作為行索引的列名,columns是要作為列索引的列名,aggfunc是要進(jìn)行聚合運(yùn)算的函數(shù),默認(rèn)為求均值,切記,對(duì)于aggfunc,操作的是values后面的值,而不是columns后面的值。fill_value是要填充缺失值的值,默認(rèn)為None,margins是是否添加行列匯總,默認(rèn)為False,dropna是是否刪除缺失值,默認(rèn)為True,margins_name是匯總項(xiàng)的名稱,默認(rèn)為'All'。
pd.pivot_table(data, values='價(jià)格', index='商品名稱', columns='代理商', aggfunc='mean', margins=True)
結(jié)果如下:
| | 張三 | 李四 | 王五 | All |
| ----- | ----- | ----- | ----- | ----- |
| 商品名稱 | | | | |
| 蘋果 | 11.00 | NaN | NaN | 11.00 |
| 香蕉 | NaN | 6.00 | NaN | 6.00 |
| 橘子 | NaN | NaN | 9.00 | 9.00 |
| All | 10.33 | 6.00 | 9.00 | 8.33 |
我們可以看到,透視表的行索引是商品名稱,列索引是代理商,單元格的值是價(jià)格的均值,缺失值用NaN表示,行列匯總用All表示。
我們還可以使用其他的聚合函數(shù),例如求和、計(jì)數(shù)、最大值、最小值等。我們也可以使用自定義的函數(shù),例如求標(biāo)準(zhǔn)差、中位數(shù)等。我們只需要將aggfunc參數(shù)的值改為相應(yīng)的函數(shù)即可。例如,如果我們想要按照商品名稱和代理商分組,計(jì)算每組的價(jià)格總和,并且添加行列匯總,我們可以使用以下代碼:
pd.pivot_table(data, values='價(jià)格', index='商品名稱', columns='代理商', aggfunc='sum', margins=True)
結(jié)果如下:
| | 張三 | 李四 | 王五 | All |
| ----- | ----- | ----- | ----- | ----- |
| 商品名稱 | | | | |
| 蘋果 | 33 | NaN | NaN | 33 |
| 香蕉 | NaN | 18 | NaN | 18 |
| 橘子 | NaN | NaN | 27 | 27 |
| All | 33 | 18 | 27 | 78 |
我們可以看到,透視表的行索引是商品名稱,列索引是代理商,單元格的值是價(jià)格的總和,缺失值用NaN表示,行列匯總用All表示。
應(yīng)用案例
案例一:使用多個(gè)值和多個(gè)索引
使用以下代碼來(lái)創(chuàng)建一個(gè)透視表,顯示每個(gè)性別和年齡段的身高和體重的最大值,最小值和平均值:
import pandas as pd import numpy as np df = pd.DataFrame({ "name": ["Alice", "Bob", "Charlie", "David", "Eve", "Frank", "Grace", "Harry"], "gender": ["F", "M", "M", "M", "F", "M", "F", "M"], "age": [16, 30, 12, 32, 27, 29, 15, 31], "height": [165, 175, 180, 170, 160, 182, 168, 178], "weight": [55, 70, 75, 68, 50, 72, 54, 69] }) df_pivot = pd.pivot_table(df, values=["height","weight"], index="gender", aggfunc=['mean','max','min']) print(df_pivot)
案例二:使用自定義函數(shù)的透視表
使用以下代碼來(lái)創(chuàng)建一個(gè)透視表,顯示每個(gè)性別的體重的平均值、身高的方差、未成年的計(jì)數(shù):
import pandas as pd import numpy as np df = pd.DataFrame({ "name": ["Alice", "Bob", "Charlie", "David", "Eve", "Frank", "Grace", "Harry"], "gender": ["F", "M", "M", "M", "F", "M", "F", "M"], "age": [16, 30, 12, 32, 27, 29, 15, 31], "height": [165, 175, 180, 170, 160, 182, 168, 178], "weight": [55, 70, 75, 68, 50, 72, 54, 69] }) def count_cld(col:pd.core.frame.Series): # col 是 Series ,每一組的數(shù)據(jù)在一起 n = 0 for i in col: if i < 18: n=n+1 return n df_pivot = pd.pivot_table(df, values=["height","weight","age"], index="gender", aggfunc={ "weight": np.mean, "height":np.std,"age":count_cld}) print(df_pivot)
以上就是python pandas最常用透視表實(shí)現(xiàn)應(yīng)用案例的詳細(xì)內(nèi)容,更多關(guān)于python pandas透視表的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- pandas中使用數(shù)據(jù)透視表的示例代碼
- Pandas實(shí)現(xiàn)(pivot_table函數(shù))數(shù)據(jù)透視表方式
- Pandas 透視表和交叉表的實(shí)現(xiàn)示例
- Pandas透視表與交叉表的使用
- Pandas數(shù)據(jù)分析之pandas數(shù)據(jù)透視表和交叉表
- Python+Pandas實(shí)現(xiàn)數(shù)據(jù)透視表
- python 用pandas實(shí)現(xiàn)數(shù)據(jù)透視表功能
- Pandas透視表(pivot_table)詳解
- pandas 透視表中文字段排序方法
- Pandas透視表(Pivot Table)的具體使用
相關(guān)文章
如何利用Python+OpenCV實(shí)現(xiàn)簡(jiǎn)易圖像邊緣輪廓檢測(cè)(零基礎(chǔ))
輪廓是形狀分析和物體檢測(cè)和識(shí)別的有用工具,下面這篇文章主要給大家介紹了關(guān)于如何利用Python+OpenCV實(shí)現(xiàn)簡(jiǎn)易圖像邊緣輪廓檢測(cè)(零基礎(chǔ))的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05Python數(shù)據(jù)分析與機(jī)器學(xué)習(xí)在金融風(fēng)控中的應(yīng)用小結(jié)
本篇詳解了Python數(shù)據(jù)分析與機(jī)器學(xué)習(xí)在金融風(fēng)控中的應(yīng)用,包括數(shù)據(jù)收集與預(yù)處理、信用風(fēng)險(xiǎn)評(píng)估模型、市場(chǎng)風(fēng)險(xiǎn)管理模型和操作風(fēng)險(xiǎn)監(jiān)控模型,感興趣的朋友跟隨小編一起看看吧2024-06-06python選取特定列 pandas iloc,loc,icol的使用詳解(列切片及行切片)
今天小編就為大家分享一篇python選取特定列 pandas iloc,loc,icol的使用詳解(列切片及行切片),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-08-08基于python的前后端分離的模擬實(shí)現(xiàn)
前后端分離核心是UI界面展示層(View)和數(shù)據(jù)處理層(Model)通過控制層(Controller)進(jìn)行解耦合,在MVC設(shè)計(jì)模式中,前端主要負(fù)責(zé)數(shù)據(jù)展示和用戶交互(View),后端處理業(yè)務(wù)邏輯和數(shù)據(jù)存儲(chǔ)(Model),通過API接口進(jìn)行通信,提高了開發(fā)效率,便于前后端分工合作,有利于代碼的維護(hù)和迭代2024-10-10