在数据分析中,常常需要用到数据透视表和交叉表,下面介绍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' )
date = ['2001-1-1','2001-1-2','2001-1-3']*3
rng = pd.to_datetime(date)
df = pd.DataFrame({'date':rng,
'key':list('abcdabcda'),
'values':np.random.rand(9)*10})
print(df)
1.以data做数据透视,统计不同key下value的和:
pd.pivot_table(df, values = 'values', index = 'date', columns = 'key', aggfunc=np.sum)
2,这里就分别以date、key共同做数据透视,值为values:统计不同(date,key)情况下values的数量
pd.pivot_table(df, values = 'values', index = ['date','key'], aggfunc=len)
二、交叉表
默认情况下,crosstab是用来计算因子的频率表。
pd.crosstab()参数:
pd.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, dropna=True, normalize=False)
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']))
2.以A和B界定分组,计算出每组中第三个系列C的和
pd.crosstab(df['A'],df['B'],values=df['C'],aggfunc=np.sum)
三、区别
透视表是一种进行分组统计的函数,而交叉表是特殊的透视表,当只统计分组频率时更方便。