1.使用povit_table函數建立透視表
利用pivot_table函數可以實作透視表,pivot_table()函數的常用參數及其使用格式如下。
pands.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean',fill_value=None, margins=False, dropna=True, margins_name=ca
參數名稱 | 說明 |
data | 接收DataFrame。表示建立表的資料。無預設。 |
values | 接收字元串。用于指定想要聚合的資料字段名,預設使用全部資料。預設為None。 |
index | 接收string或list。表示行分組鍵。預設為None。 |
columns | 接收string或list。表示列分組鍵。預設為None。 |
aggfunc | 接收functions。表示聚合函數。預設為mean。 |
margins | 接收boolearn。表示彙總(Total)功能的開關,設為True後結果集中會出現名為“ALL”的行 和列。預設為True |
dropna | 接收boolearn。表示是否删掉全為NaN的列。預設為False |
pivot_table函數主要的參數調節
在不特殊指定聚合函數aggfunc時,會預設使用numpy.mean進行聚合運算,numpy.mean會自動過濾
掉非數值類型資料。可以通過指定aggfunc參數修改聚合函數。
和groupby方法分組的時候相同,pivot_table函數在建立透視表的時候分組鍵index可以有多個。
通過設定columns參數可以指定列分組。
當全部資料列數很多時,若隻想要顯示某列,可以通過指定values參數來實作。
當某些資料不存在時,會自動填充NaN,是以可以指定fill_value參數,表示當存在缺失值時,以指定數
值進行填充。
可以更改margins參數,檢視彙總資料。
2.使用crosstab函數建立交叉表
crosstab函數
交叉表是一種特殊的透視表,主要用于計算分組頻率。利用pandas提供的crosstab函數可以制作交叉表,
crosstab函數的常用參數和使用格式如下。
Ø 由于交叉表是透視表的一種,其參數基本保持一緻,不同之處在于crosstab函數中的index,columns,
values填入的都是對應的從Dataframe中取出的某一列。
pandas.crosstab(index, columns, values=None, rownames=None, colnames=None,
aggfunc=None, margins=False, dropna=True, normalize=False)
crosstab的常用參數及其說明
參數名稱 | 說明 |
index | 接收string或list。表示行索引鍵。無預設。 |
columns | 接收string或list。表示列索引鍵。無預設 |
values | 接收array。表示聚合資料。預設為None |
aggfunc | 接收function。表示聚合函數。預設為None。 |
rownames | 表示行分組鍵名。無預設。 |
colnames | 表示列分組鍵名。無預設 |
dropna | 接收boolearn。表示是否删掉全為NaN的。預設為False。 |
margins | 接收boolearn。預設為True。彙總(Total)功能的開關,設為True 後結果集中會出現名為“ALL”的行和列。 |
normalize | 接收boolearn。表示是否對值進行标準化。預設為False |
import pandas as pd
import numpy as np
detail = pd.read_excel('./meal_order_detail.xlsx')
###data 用于建立表的資料
data = detail[['order_id', 'dishes_id', 'dishes_name', 'counts', 'amounts']]
##data 用于建立表的資料
# values 關心的資料,用于統計分析的資料
# index 按照這個進行 行分組
# aggfunc ----->可以指定統計函數
# fill_value----->可以指定空值填充類型
# margins----->每統計完一次,行的統計和
###按照order_id 進行 行分組,統計amounts 和counts的均值
res= pd.pivot_table(data,values=['amounts','counts'],index='order_id')
print(res)
###按照dishes_name 進行列分組,統計amounts 和counts的均值
res = pd.pivot_table(data, values=['amounts', 'counts'], columns='dishes_name', aggfunc='max')
print(res)
###按照dishes_name 進行列分組,按照order_id 進行 行分組 ,統計amounts 和counts的均值
res = pd.pivot_table(data, values=['amounts', 'counts'], columns='dishes_name', index='order_id', fill_value=0)
print(res)
###建立交叉表
###必須指定 index,columns,values,aggfunc
##可以隻傳行和列,用于統計兩列資料的頻率
res = pd.crosstab(index=detail['order_id'],columns=detail['amounts'],dropna=True,margins=True)
print(res)