透视表 pivot table
透视表(pivot table)是常见的数据汇总工具,它根据一个或多个键对数据进行聚合,根据行和列上的分组键将数据分配到矩形区域中。 pandas中使用pivot_table方法创建透视表, pd.pivot_table(data,values=None,index=None,columns=None,aggfunc='mean' ,fill_value=None,margins=False,dropna=True,margins_name='ALL') data:DataFrame对象 values:要聚合的列或列的列表 index:数据透视的index,从原始数据的列中筛选 columns:数据透视表的columns,从原始数据的列中筛选 aggfunc:用于聚合的函数,默认为numpy,mean,支持numpy计算方法 ------------原数据------------ date key values 0 2019-01-01 a 6.372699 1 2019-01-02 b 0.649605 2 2019-01-03 c 4.897285 3 2019-01-01 d 7.758373 4 2019-01-02 a 1.576888 5 2019-01-03 b 8.217029 6 2019-01-01 c 5.454403 7 2019-01-02 a 5.072132 8 2019-01-03 b 2.875602 ------------透视表1------------
print(pd.pivot_table(df,values = 'values',index = ['date'],columns='key',aggfunc=np.sum)) key a b c d date 2019-01-01 6.372699 NaN 5.454403 7.758373 2019-01-02 6.649020 0.649605 NaN NaN 2019-01-03 NaN 11.092630 4.897285 NaN ------------透视表2------------
#分别以date,key共同做数据透视,值为values:统计不同(date,key)情况下values的计数
#aggfunc=len(或者count):计数
print(pd.pivot_table(df,values = 'values',index = ['date','key'],aggfunc=len)) values date key 2019-01-01 a 1.0 c 1.0 d 1.0 2019-01-02 a 2.0 b 1.0 2019-01-03 b 2.0 c 1.0
交叉表:crosstab
默认情况下,crosstab计算因子的频率,比如用于str的数据透视分析
pd.crosstab(index,columns,values=None,rownames=None ,colnames=None,aggfunc=None,margins=False,dropna=True,normalize=False)
------------原数据------------ A B C 0 1 3 1.0 1 2 3 1.0 2 2 4 NaN 3 2 4 1.0 4 2 4 1.0 ------------交叉表1------------
print(pd.crosstab(df['A'],df['B'])) B 3 4 A 1 1 0 2 1 3 ------------交叉表2------------
print(pd.crosstab(df['A'],df['B'],normalize=True))#以频率的方式显示 B 3 4 A 1 0.2 0.0 2 0.2 0.6 ------------交叉表3------------
print(pd.crosstab(df['A'],df['B'],values=df['C'],aggfunc=np.sum))
#values:根据因子聚合的值数组
#aggfunc:如果未传递values数组,则计算频率表,如果传递数组,则按照指定计算
#这里相当于以A和B界定分组,计算出每组中第三个系列C的值 B 3 4 A 1 1.0 NaN 2 1.0 2.0 ------------交叉表4------------
print(pd.crosstab(df['A'],df['B'],values=df['C'],aggfunc=np.sum,margins=True))
#margins:布尔值,默认值False,添加行/列边距(小计) B 3 4 All A 1 1.0 NaN 1.0 2 1.0 2.0 3.0 All 2.0 2.0 4.0
REF
https://blog.csdn.net/pythoncsdn111/article/details/98240358
|