发布网友 发布时间:2024-09-26 22:04
共1个回答
热心网友 时间:2024-10-31 17:06
数据分组就是根据一个或多个键(可以是函数、数组或者df列名)将数据分为若干组,然后对分组后的数据分别进行汇总计算,并将汇总计算后的结果进行合并。被用作汇总计算的函数称为聚合函数。
本文用到的表格内容如下:
先来看一下数据情形
importpandasaspdlife_df=pd.read_excel(r'C:\Users\admin\Desktop\生活用品表.xlsx')print(life_df)result:
分类编号名称0水果0苹果1水果1橙子2生活用品2牙刷3生活用品3冰箱4生活用品4电视机5食物0苹果6食物1橙子7家电3冰箱8家电4电视机9大件3冰箱10大件4电视机11大件5茶几12生活用品7暖手宝宝13小说8红楼梦数据分组具体的过程如下所示
1 按照一列进行分组life_df=pd.read_excel(r'C:\Users\admin\Desktop\生活用品表.xlsx')print(life_df.groupby("分类"))result:
<pandas.core.groupby.generic.DataFrameGroupByobjectat0x000001894A41C708>从上面的结果可以看出,如果只是传入列名,分组后的结果是一个DataFrameGroupBy对象。这个对象包含着分组以后的若干组数据,但是没有直接显示出来,需要对这些分组数据进行汇总计算以后才会显示出来
life_df=pd.read_excel(r'C:\Users\admin\Desktop\生活用品表.xlsx')print(life_df.groupby("分类").count())result:
编号名称分类大件33家电22小说11水果22生活用品44食物22上面的代码是根据物品分类对所有数据进行了分组,然后对分组以后的数据分别进行计数运算,最后进行合并。
由于对分组后的数据进行了计数运算,因此每一列都会有一个结果。但是如果对分组后的结果做一些数值运算,这个时候只有数据类型是数值(int、float)的列才会参与运算
importpandasaspdlife_df=pd.read_excel(r'C:\Users\admin\Desktop\生活用品表.xlsx')print(life_df.groupby("分类").sum())result:
编号分类大件12家电7小说8水果1生活用品16食物1我们把这种对分组后的数据进行汇总运算的操作称为聚合,使用的函数称为聚合函数。比如前面系列文章提高的非空值计数、sum求和、最大值最小值、均值、中位数、众数、方差、标准差和分位数这些。都属于聚合函数。
2 按照多列进行分组多列分组和单列分组差不多,只要将对个列名以列表的形式传递给groupby()即可。
life_df=pd.read_excel(r'C:\Users\admin\Desktop\生活用品表.xlsx')print(life_df.groupby(["分类","名称"]).count())result:
编号分类名称大件冰箱1电视机1茶几1家电冰箱1电视机1小说红楼梦1水果橙子1苹果1生活用品冰箱1暖手宝宝1牙刷1电视机1食物橙子1苹果1分类编号名称0水果0苹果1水果1橙子2生活用品2牙刷3生活用品3冰箱4生活用品4电视机5食物0苹果6食物1橙子7家电3冰箱8家电4电视机9大件3冰箱10大件4电视机11大件5茶几12生活用品7暖手宝宝13小说8红楼梦0result:
分类编号名称0水果0苹果1水果1橙子2生活用品2牙刷3生活用品3冰箱4生活用品4电视机5食物0苹果6食物1橙子7家电3冰箱8家电4电视机9大件3冰箱10大件4电视机11大件5茶几12生活用品7暖手宝宝13小说8红楼梦13 分组和聚合采用不同的列进行上述1和2这2种方式,无论是一列还是多列,只要直接在分组后的数据上进行汇总计算,就是对所有可计算的列进行计算。有的时候我们不需要对所有列进行计算,这个时候可以指定要计算的列(无论是单列还是多列)
分类编号名称0水果0苹果1水果1橙子2生活用品2牙刷3生活用品3冰箱4生活用品4电视机5食物0苹果6食物1橙子7家电3冰箱8家电4电视机9大件3冰箱10大件4电视机11大件5茶几12生活用品7暖手宝宝13小说8红楼梦2result:
分类编号名称0水果0苹果1水果1橙子2生活用品2牙刷3生活用品3冰箱4生活用品4电视机5食物0苹果6食物1橙子7家电3冰箱8家电4电视机9大件3冰箱10大件4电视机11大件5茶几12生活用品7暖手宝宝13小说8红楼梦3这里就是按照物品分类进行分组,再按照物品名称进行汇总统计