pandas——交叉表与透视表

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)

猜你喜欢

转载自blog.csdn.net/weixin_43567965/article/details/92844990
今日推荐