数据分析处理——透析表和交叉表

1透视表

  数据透视表(Pivot Table)是一种交互式的表,可以进行某些计算,如求和与计数等。所进行的计算与数据跟数据透视表中的排列有关。 之所以称为数据透视表,是因为可以动态地改变它们的版面布置,以便按照不同方式分析数据,也可以重新安排行号、列标和页字段。

  数据分析中的透析表十分强大,甚至可以说是相当于分组聚合外加哑变量三个步骤了。但有个前提就是:在使用透析表之前,你必须明确知道自己想要的是什么,需要做什么!

  当然,有时候你很难直接看出需求。这时候我们就得添加项目和检查每一步来验证我们一步一步得到期望的结果。为了查看什么样的外观最能满足你的需要,就不要害怕处理顺序和变量的繁琐。

 

函数

pands.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')

名称说明
data接收DataFrame。表示透视表的数据。无默认。
values接收字符串。用于指定想要聚合的数据字段名,默认使用全部数据。默认为None。
index接收string或list。表示行分组键。默认为None。
columns接收string或list。表示列分组键。默认为None。
aggfunc接收functions。表示聚合函数。默认为mean。
fill_value接受scalar。表示是否将fill_value的数值代替缺失值。默认为None。
margins接收boolearn。表示汇总(Total)功能的开关,设为True后结果集中会出现名为“ALL”的行和列。默认为True。
dropna接收boolearn。表示是否删掉全为NaN的列。默认为False。
margins_name 接收string。表示margins为True时,'All'的名称。

 

OK,下面开始示范。

# 导入库包
import pandas as pd
import numpy as np

#数据,自编
data = pd.read_csv('./data.csv',encoding='gbk')
data.head()
 detail_idorder_iddishes_idlogicprn_nameparent_class_namedishes_nameitemis_addcountsamountscostplace_order_timediscount_amtdiscount_reasonkick_backadd_inpriceadd_infobar_codepicture_fileemp_id
02956417610062NaNNaN蒜蓉生蚝0149NaN2016/8/111:05:00NaNNaNNaN0NaNNaNcaipu/104001.jpg1442
12958417609957NaNNaN蒙古烤羊腿0148NaN2016/8/111:07:00NaNNaNNaN0NaNNaNcaipu/202003.jpg1442
22961417609950NaNNaN大蒜苋菜0130NaN2016/8/111:07:00NaNNaNNaN0NaNNaNcaipu/303001.jpg1442
32966417610038NaNNaN芝麻烤紫菜0125NaN2016/8/111:11:00NaNNaNNaN0NaNNaNcaipu/105002.jpg1442
42968417610003NaNNaN蒜香包0113NaN2016/8/111:11:00NaNNaNNaN0NaNNaNcaipu/503002.jpg1442

 

# 先看一下数据大小
data.shape
(10037, 19)

# 取4列中的前20行
pd.pivot_table(data[['order_id','counts','amounts','dishes_name']][:20], values=['counts'], index='order_id', columns='dishes_name', aggfunc='count', fill_value=0, margins=False, dropna=True, margins_name='All')
 counts
dishes_name大蒜苋菜干锅田鸡桂圆枸杞鸽子汤爆炒鳝碌番茄有机花菜番茄炖秋葵番茄甘蓝白斩鸡白饭/大碗皮蛋瘦肉粥芝士烩波士顿龙虾芝麻烤紫菜葱姜炒蟹蒙古烤羊腿蒜蓉生蚝蒜香包重庆特色油烧兔长城窖酿解百纳红酒干红葡萄酒香烤牛排
order_id                   
3010110100110000000001
4130101011001101000110
4171000000000010111000

 

2交叉表

  交叉表是一种特殊的透视表,主要用于计算分组频率。利用pandas提供的crosstab函数可以制作交叉表,crosstab函数的常用参数和使用格式格式如下。

 

函数

pandas.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, dropna=True, normalize=False)

名称说明
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。
 
# 与上边透析表一样的行列和值(输出结果有点多,故后边省略)
pd.crosstab(index=data['order_id'],columns=data['dishes_name'],values = data['counts'],aggfunc = np.sum)

 

转载于:https://www.cnblogs.com/WoLykos/p/9408147.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值