交叉报表crosstab隐藏列名显示_pd.pivot_table与pd.crosstab

本文介绍了如何使用pandas的pivot_table和crosstab函数进行数据透视和交叉表分析,详细解析了各个参数的含义,并通过实例展示了如何统计不同条件下的数据聚合结果。同时,对比了两者之间的区别,指出透视表作为groupby的高级功能,更适合复杂的数据聚合,而交叉表则适用于快速生成频率表。
摘要由CSDN通过智能技术生成

在数据分析中,常常需要用到数据透视表和交叉表,下面介pandas.DataFrame.pivot_table数据透视表和pandas.DataFrame.crosstab交叉表的用法和区别。

一、数据透视表

数据透视表用来做数据透视,可以通过一个或多个键分组聚合DataFrame中的数据,通过aggfunc参数决定聚合类型,是groupby的高级功能。

pd.pivot_table参数如下:

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

data:DataFrame对象

values:要聚合的列或列的列表

index:数据透视表的index,从原数据的列中筛选

columns:数据透视表的columns,从原数据的列中筛选

aggfunc:用于聚合的函数,默认为numpy.mean,支持numpy计算方法

fill_value: 用于替换缺失值的值

margin: 添加所有行/列

dropna: 不包括条目为 NaN的列,默认为True

margin_name: 当margin为True时,将包含总计的行/列的名称

import pandas as pd
date = ['2020-4-1','2020-4-2','2020-4-3']*3
rng = pd.to_datetime(date)
df = pd.DataFrame({'date':rng,
                   'key':list('abcdabcda'),
                  'values':np.random.rand(9)*10})
print(df)

69114f17b9814c490af2ce4f91b3e931.png

1.以data做数据透视,统计不同key下value的和:

a=pd.pivot_table(df, values = 'values', index = 'date', 
               columns = 'key', aggfunc=np.sum,fill_value='缺失值')
print(a)

fa15ef3539308cf4f31cee75965ec55c.png

2,这里就分别以date、key共同做数据透视,值为values:统计不同(date,key)情况下values的数量

b=pd.pivot_table(df, values = 'values', index = ['date','key'], aggfunc=len)
print(b)

2f7347104196fca2534dbc69eb8a8f69.png

二、交叉表

默认情况下,crosstab是用来计算因子的频率表。

pd.crosstab()参数:

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

index::要在行中分组的值

columns:要在列中分组的值

values:根据因子聚合的值数组,需指定aggfunc

aggfunc:如指定,还需指定value

normalize:将所有值除以值的总和进行归一化 ,为True时候显示百分比

1.如果crosstab只接收两个Series,它将提供一个频率表。用A的唯一值,统计B唯一值的出现次数:

df = pd.DataFrame({'A': [1, 2, 2, 2, 2],
                   'B': [3, 3, 4, 4, 4],
                   'C': [1, 1, np.nan, 1, 1]})
print(df)
print('-----')
print(pd.crosstab(df['A'],df['B']))

67d00e1fa3275f9f0dce7ca247e88972.png

2.以A和B界定分组,计算出每组中第三个系列C的和

pd.crosstab(df['A'],df['B'],values=df['C'],aggfunc=np.sum)

5faaa38ff7c3540722ac2d106ec856ad.png

三、区别

透视表是一种进行分组统计的函数,而交叉表是特殊的透视表,当只统计分组频率时更方便

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值