解讀pandas交叉表與透視表pd.crosstab()和pd.pivot_table()函數(shù)
一、交叉表
交叉表:用于計(jì)算一列數(shù)據(jù)對(duì)于另外一列數(shù)據(jù)的分組個(gè)數(shù)(用于統(tǒng)計(jì)分組頻率的特殊透視表),pd.crosstab(value1, value2)
pandas.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, margins_name='All', dropna=True, normalize=False)
計(jì)算兩個(gè)(或多個(gè))因子的簡(jiǎn)單交叉制表。 默認(rèn)情況下, 計(jì)算因子的頻率表,除非傳遞值數(shù)組和聚合函數(shù)
index:類似數(shù)組、系列或數(shù)組/系列值的列表,行中分組依據(jù)的值columns:類似數(shù)組、系列或數(shù)組/系列值的列表,列中要作為分組依據(jù)的值values:類似數(shù)組,可選,要根據(jù)因素聚合的值數(shù)組,需要指定 aggfuncrownames:序列,默認(rèn) None ,如果傳遞,必須匹配傳遞的行數(shù)組的數(shù)量colnames:序列,默認(rèn) None ,如果傳遞,必須匹配傳遞的列數(shù)組的數(shù)量aggfunc:function,可選,如果指定,則還需要指定值margins:bool, 默認(rèn)False 添加行/列邊距(小計(jì))margins_name:str,默認(rèn)為“All”,當(dāng)邊距為 True 時(shí)將包含總計(jì)的行/列的名稱dropna:bool, 默認(rèn)為True,不包含條目均為 NaN 的列normalize:bool, {‘all’, ‘index’, ‘columns’}, or {0,1}, 默認(rèn)為False,通過(guò)將所有值除以值的總和來(lái)歸一化
“all”或 True:將對(duì)所有值進(jìn)行歸一化
index:將對(duì)每一行進(jìn)行歸一化
columns:將對(duì)每一列進(jìn)行歸一化
若margins 為 True,也將標(biāo)準(zhǔn)化邊距值
- 返回:數(shù)據(jù)的 DataFrame 交叉表
傳遞的任何 Series 都將使用其名稱屬性,除非指定了交叉表的行或列名稱。
傳遞的任何包含分類數(shù)據(jù)的輸入都將在交叉表中包含其所有類別,即使實(shí)際數(shù)據(jù)不包含特定類別的任何實(shí)例也是如此。
如果沒(méi)有重疊索引,將返回一個(gè)空的 DataFrame
a = np.array(["foo", "foo", "foo", "foo", "bar", "bar", "bar", "bar", "foo", "foo", "foo"], dtype=object) b = np.array(["one", "one", "one", "two", "one", "one", "one", "two", "two", "two", "one"], dtype=object) c = np.array(["dull", "dull", "shiny", "dull", "dull", "shiny", "shiny", "dull", "shiny", "shiny", "dull"], dtype=object) pd.crosstab(a, [b, c], rownames=['a'], colnames=['b', 'c']) ----------------------------------------------------------------------------------------- # 算數(shù)運(yùn)算,先求和 sum = count.sum(axis=1) sum ------------------------------------- # 進(jìn)行相除操作,得出比例 pro = count.div(sum, axis=0) pro ------------------------------------- import matplotlib.pyplot as plt pro.plot(kind='bar', stacked=True) plt.show()



二、透視表
透視表:透視表是將原有的DataFrame的列分別作為行索引和列索引,然后對(duì)指定的列應(yīng)用聚集函數(shù),是一種可以對(duì)數(shù)據(jù)動(dòng)態(tài)排布并且分類匯總的表格格式
DataFrame.pivot_table(values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False, sort=True)
創(chuàng)建一個(gè)電子表格樣式的數(shù)據(jù)透視表作為 DataFrame。數(shù)據(jù)透視表中的級(jí)別將存儲(chǔ)在結(jié)果 DataFrame 的索引和列上的 MultiIndex 對(duì)象(分層索引)中
values:要聚合的列,可選,默認(rèn)對(duì)所有列操作index:column, Grouper, array, or list of the previous 如果傳遞數(shù)組,它必須與數(shù)據(jù)的長(zhǎng)度相同。該列表可以包含任何其他類型(列表除外)。在數(shù)據(jù)透視表索引上分組的鍵。如果傳遞一個(gè)數(shù)組,它的使用方式與列值相同column:column, Grouper, array, or list of the previous 如果傳遞一個(gè)數(shù)組,它必須和數(shù)據(jù)一樣長(zhǎng)。該列表可以包含任何其他類型(列表除外)。在數(shù)據(jù)透視表列上分組的鍵。如果傳遞一個(gè)數(shù)組,它的使用方式與列值相同aggfunc:function, list of functions, dict, 默認(rèn)為numpy.mean 如果傳遞函數(shù)列表,則生成的數(shù)據(jù)透視表將具有分層列,其頂層是函數(shù)名稱(從函數(shù)對(duì)象本身推斷)如果傳遞dict,則鍵是列聚合和值是函數(shù)或函數(shù)列表fill_value:scalar,默認(rèn) None 用于替換缺失值的值(在聚合后的結(jié)果數(shù)據(jù)透視表中)margins:bool, 默認(rèn)False 添加所有行/列(例如小計(jì)/總計(jì))dropna:bool, 默認(rèn)為True,不包含條目均為 NaN 的列。如果為 True,則在計(jì)算邊距之前將忽略任何列中具有 NaN 值的行margins_name:str,默認(rèn)為“All” 當(dāng)邊距為 True 時(shí)將包含總計(jì)的行/列的名稱observed:bool,默認(rèn)為 False 這僅適用于任何groupers 是分類的。若為True:僅顯示分類groupers 的觀察值。否則顯示分類groupers 的所有值。?????sort:bool, default True 指定結(jié)果是否應(yīng)該排序- 返回 DataFrame:Excel 樣式的數(shù)據(jù)透視表
代碼如下
df = pd.DataFrame({"A": ["aaa", "aaa", "aaa", "aaa", "aaa","aa", "aa", "aa"],
"B": ["bbb", "bbb", "bbb", "bb", "bb", "bbb", "bbb", "bb"],
"C": ["small", "large", "large", "small","small", "large", "small", "small"],
"D": [1, 2, 2, 3, 3, 4, 5, 6],
"E": [2, 4, 5, 5, 6, 6, 8, 9]})
df
---------------------------------------------------------------------------------------
pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'], aggfunc=np.sum) # 通過(guò)求和來(lái)聚合值
pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'], aggfunc=np.sum, fill_value=0) # 可以使用fill_value參數(shù)填充缺失的值
pd.pivot_table(df, values=['D', 'E'], index=['A', 'C'], aggfunc={'D': np.mean, 'E': np.mean}) # 通過(guò)對(duì)多個(gè)列取平均值進(jìn)行聚合
pd.pivot_table(df, values=['D', 'E'], index=['A', 'C'], aggfunc={'D': np.mean, 'E': [min, max, np.mean]}) # 可以為任何給定值列計(jì)算多種類型的聚合操作演示如下



總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決Jupyter Notebook開(kāi)始菜單欄Anaconda下消失的問(wèn)題
這篇文章主要介紹了解決Jupyter Notebook開(kāi)始菜單欄Anaconda下消失的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
Python numpy數(shù)組轉(zhuǎn)置與軸變換
這篇文章主要介紹了Python numpy數(shù)組轉(zhuǎn)置與軸變換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
python制作花瓣網(wǎng)美女圖片爬蟲(chóng)
本文通過(guò)python 來(lái)實(shí)現(xiàn)這樣一個(gè)簡(jiǎn)單的爬蟲(chóng)功能,把我們想要的圖片爬取到本地,需要的朋友可以參考下2015-10-10
Python第三方庫(kù)之OpenCV庫(kù)的實(shí)用指南
OpenCV(Open Source Computer Vision Library)作為一個(gè)強(qiáng)大的計(jì)算機(jī)視覺(jué)庫(kù),提供了豐富的圖像處理和計(jì)算機(jī)視覺(jué)功能,本文將帶領(lǐng)讀者使用Python編程語(yǔ)言,通過(guò)簡(jiǎn)單的代碼示例,初步掌握OpenCV的圖像處理技術(shù),需要的朋友可以參考下2024-09-09
使用Python設(shè)置Windows文件默認(rèn)打開(kāi)程序
本文介紹了一個(gè)用于Windows系統(tǒng)設(shè)置文件默認(rèn)打開(kāi)程序的Python工具,通過(guò)命令行和注冊(cè)表兩種方式修改關(guān)聯(lián),適用于Windows7/10/11,代碼包括設(shè)置默認(rèn)程序、兼容性處理和驗(yàn)證功能,并提供了使用示例,需要的朋友可以參考下2026-01-01
Python+OCR實(shí)現(xiàn)文檔解析的示例代碼
本文是一個(gè)簡(jiǎn)單教程,主要介紹了如何使用OCR進(jìn)行文檔解析以及使用Layoutpars軟件包進(jìn)行了整個(gè)檢測(cè)和提取過(guò)程,感興趣的可以了解一下2022-09-09
pymongo給mongodb創(chuàng)建索引的簡(jiǎn)單實(shí)現(xiàn)方法
這篇文章主要介紹了pymongo給mongodb創(chuàng)建索引的簡(jiǎn)單實(shí)現(xiàn)方法,涉及Python使用pymongo模塊操作mongodb的技巧,需要的朋友可以參考下2015-05-05

