解讀pandas交叉表與透視表pd.crosstab()和pd.pivot_table()函數(shù)
一、交叉表
交叉表:用于計算一列數(shù)據(jù)對于另外一列數(shù)據(jù)的分組個數(shù)(用于統(tǒng)計分組頻率的特殊透視表),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)
計算兩個(或多個)因子的簡單交叉制表。 默認(rèn)情況下, 計算因子的頻率表,除非傳遞值數(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 添加行/列邊距(小計)margins_name
:str,默認(rèn)為“All”,當(dāng)邊距為 True 時將包含總計的行/列的名稱dropna
:bool, 默認(rèn)為True,不包含條目均為 NaN 的列normalize
:bool, {‘all’, ‘index’, ‘columns’}, or {0,1}, 默認(rèn)為False,通過將所有值除以值的總和來歸一化
“all”或 True:將對所有值進(jìn)行歸一化
index:將對每一行進(jìn)行歸一化
columns:將對每一列進(jìn)行歸一化
若margins 為 True,也將標(biāo)準(zhǔn)化邊距值
- 返回:數(shù)據(jù)的 DataFrame 交叉表
傳遞的任何 Series 都將使用其名稱屬性,除非指定了交叉表的行或列名稱。
傳遞的任何包含分類數(shù)據(jù)的輸入都將在交叉表中包含其所有類別,即使實際數(shù)據(jù)不包含特定類別的任何實例也是如此。
如果沒有重疊索引,將返回一個空的 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的列分別作為行索引和列索引,然后對指定的列應(yīng)用聚集函數(shù),是一種可以對數(shù)據(jù)動態(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)建一個電子表格樣式的數(shù)據(jù)透視表作為 DataFrame。數(shù)據(jù)透視表中的級別將存儲在結(jié)果 DataFrame 的索引和列上的 MultiIndex 對象(分層索引)中
values
:要聚合的列,可選,默認(rèn)對所有列操作index
:column, Grouper, array, or list of the previous 如果傳遞數(shù)組,它必須與數(shù)據(jù)的長度相同。該列表可以包含任何其他類型(列表除外)。在數(shù)據(jù)透視表索引上分組的鍵。如果傳遞一個數(shù)組,它的使用方式與列值相同column
:column, Grouper, array, or list of the previous 如果傳遞一個數(shù)組,它必須和數(shù)據(jù)一樣長。該列表可以包含任何其他類型(列表除外)。在數(shù)據(jù)透視表列上分組的鍵。如果傳遞一個數(shù)組,它的使用方式與列值相同aggfunc
:function, list of functions, dict, 默認(rèn)為numpy.mean 如果傳遞函數(shù)列表,則生成的數(shù)據(jù)透視表將具有分層列,其頂層是函數(shù)名稱(從函數(shù)對象本身推斷)如果傳遞dict,則鍵是列聚合和值是函數(shù)或函數(shù)列表fill_value
:scalar,默認(rèn) None 用于替換缺失值的值(在聚合后的結(jié)果數(shù)據(jù)透視表中)margins
:bool, 默認(rèn)False 添加所有行/列(例如小計/總計)dropna
:bool, 默認(rèn)為True,不包含條目均為 NaN 的列。如果為 True,則在計算邊距之前將忽略任何列中具有 NaN 值的行margins_name
:str,默認(rèn)為“All” 當(dāng)邊距為 True 時將包含總計的行/列的名稱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) # 通過求和來聚合值 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}) # 通過對多個列取平均值進(jìn)行聚合 pd.pivot_table(df, values=['D', 'E'], index=['A', 'C'], aggfunc={'D': np.mean, 'E': [min, max, np.mean]}) # 可以為任何給定值列計算多種類型的聚合
操作演示如下
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python實現(xiàn)經(jīng)典排序算法的示例代碼
這篇文章主要介紹了python實現(xiàn)經(jīng)典排序算法的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02Python+matplotlib實現(xiàn)繪制等高線圖示例詳解
在matplotlib.pyplot中除了可以繪制常規(guī)圖表如折線、柱狀、散點(diǎn)等,還可以繪制常用在地理上的平面展示地型的等高線圖,本文主要為大家介紹了如何利用matplotlib繪制等高線圖,需要的可以參考一下2021-12-12Python3.2中的字符串函數(shù)學(xué)習(xí)總結(jié)
這篇文章主要介紹了Python3.2中的字符串函數(shù)學(xué)習(xí)總結(jié),本文講解了格式化類方法、查找 & 替換類方法、拆分 & 組合類方法等內(nèi)容,需要的朋友可以參考下2015-04-04基于Python實現(xiàn)股票數(shù)據(jù)分析的可視化
在購買股票的時候,可以使用歷史數(shù)據(jù)來對當(dāng)前的股票的走勢進(jìn)行預(yù)測,這就需要對股票的數(shù)據(jù)進(jìn)行獲取并且進(jìn)行一定的分析。本文將介紹如何通過Python實現(xiàn)股票數(shù)據(jù)分析的可視化,需要的可以參考一下2021-12-12python3對拉勾數(shù)據(jù)進(jìn)行可視化分析的方法詳解
這篇文章主要給大家介紹了關(guān)于python3對拉勾數(shù)據(jù)進(jìn)行可視化分析的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python3具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04