案例实现
其实就是两个分类变量,组成多少种出现的情况,类似于混淆矩阵,交叉表。
代码实现
df = pd.DataFrame({'时间': [*'AABBBA'],
'地区': [*'xxyzzz']})
df['值']=np.random.randint(1,3,size=(6,))
df
时间地区是我给的样例名称,还可以是不同的班级不同的老师,不同的设备不同的型号...反正就是两个分类变量就行。
需要统计他们各种组合出现的次数:
(df.groupby(['时间', '地区'])
.size()
.unstack()
.fillna(0)
.astype(int)
)
还可以这样:
pd.crosstab(df['时间'],df['地区'])
一样的效果。
数据透视分组聚合
上面是两个分类变量在玩,我们还有第三个变量:值,也带入进来怎么计算呢?
例如我们需要查看不同时间不同地区的销售量总和,可以这么写:
pd.pivot_table(df,index='时间',columns='地区',values='值',aggfunc=np.sum,margins=True)
aggfunc=np.sum,表示使用求和函数,margins=True表示添加汇总行。
还可以这样:
df.groupby(['时间', '地区'])['值'].sum()
也能算。