解讀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)
計算兩個(或多個)因子的簡單交叉制表。 默認情況下, 計算因子的頻率表,除非傳遞值數(shù)組和聚合函數(shù)
index:類似數(shù)組、系列或數(shù)組/系列值的列表,行中分組依據(jù)的值columns:類似數(shù)組、系列或數(shù)組/系列值的列表,列中要作為分組依據(jù)的值values:類似數(shù)組,可選,要根據(jù)因素聚合的值數(shù)組,需要指定 aggfuncrownames:序列,默認 None ,如果傳遞,必須匹配傳遞的行數(shù)組的數(shù)量colnames:序列,默認 None ,如果傳遞,必須匹配傳遞的列數(shù)組的數(shù)量aggfunc:function,可選,如果指定,則還需要指定值margins:bool, 默認False 添加行/列邊距(小計)margins_name:str,默認為“All”,當邊距為 True 時將包含總計的行/列的名稱dropna:bool, 默認為True,不包含條目均為 NaN 的列normalize:bool, {‘all’, ‘index’, ‘columns’}, or {0,1}, 默認為False,通過將所有值除以值的總和來歸一化
“all”或 True:將對所有值進行歸一化
index:將對每一行進行歸一化
columns:將對每一列進行歸一化
若margins 為 True,也將標準化邊距值
- 返回:數(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ù)運算,先求和 sum = count.sum(axis=1) sum ------------------------------------- # 進行相除操作,得出比例 pro = count.div(sum, axis=0) pro ------------------------------------- import matplotlib.pyplot as plt pro.plot(kind='bar', stacked=True) plt.show()



二、透視表
透視表:透視表是將原有的DataFrame的列分別作為行索引和列索引,然后對指定的列應用聚集函數(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:要聚合的列,可選,默認對所有列操作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, 默認為numpy.mean 如果傳遞函數(shù)列表,則生成的數(shù)據(jù)透視表將具有分層列,其頂層是函數(shù)名稱(從函數(shù)對象本身推斷)如果傳遞dict,則鍵是列聚合和值是函數(shù)或函數(shù)列表fill_value:scalar,默認 None 用于替換缺失值的值(在聚合后的結(jié)果數(shù)據(jù)透視表中)margins:bool, 默認False 添加所有行/列(例如小計/總計)dropna:bool, 默認為True,不包含條目均為 NaN 的列。如果為 True,則在計算邊距之前將忽略任何列中具有 NaN 值的行margins_name:str,默認為“All” 當邊距為 True 時將包含總計的行/列的名稱observed:bool,默認為 False 這僅適用于任何groupers 是分類的。若為True:僅顯示分類groupers 的觀察值。否則顯示分類groupers 的所有值。?????sort:bool, default True 指定結(jié)果是否應該排序- 返回 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}) # 通過對多個列取平均值進行聚合
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)典排序算法的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-02-02
Python+matplotlib實現(xiàn)繪制等高線圖示例詳解
在matplotlib.pyplot中除了可以繪制常規(guī)圖表如折線、柱狀、散點等,還可以繪制常用在地理上的平面展示地型的等高線圖,本文主要為大家介紹了如何利用matplotlib繪制等高線圖,需要的可以參考一下2021-12-12
Python3.2中的字符串函數(shù)學習總結(jié)
這篇文章主要介紹了Python3.2中的字符串函數(shù)學習總結(jié),本文講解了格式化類方法、查找 & 替換類方法、拆分 & 組合類方法等內(nèi)容,需要的朋友可以參考下2015-04-04
基于Python實現(xiàn)股票數(shù)據(jù)分析的可視化
在購買股票的時候,可以使用歷史數(shù)據(jù)來對當前的股票的走勢進行預測,這就需要對股票的數(shù)據(jù)進行獲取并且進行一定的分析。本文將介紹如何通過Python實現(xiàn)股票數(shù)據(jù)分析的可視化,需要的可以參考一下2021-12-12
python3對拉勾數(shù)據(jù)進行可視化分析的方法詳解
這篇文章主要給大家介紹了關(guān)于python3對拉勾數(shù)據(jù)進行可視化分析的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Python3具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-04-04

