pandas系列之数据分组(一)按照列名分组
数据分组就是根据一个或多个键(可以是函数、数组或者df列名)将数据分为若干组,然后对分组后的数据分别进行汇总计算,并将汇总计算后的结果进行合并。被用作汇总计算的函数称为聚合函数。
本文用到的表格内容如下:
先来看一下数据情形
import pandas as pd
life_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.DataFrameGroupBy object at 0x000001894A41C708>
从上面的结果可以看出,如果只是传入列名,分组后的结果是一个DataFrameGroupBy对象。这个对象包含着分组以后的若干组数据,但是没有直接显示出来,需要对这些分组数据进行汇总计算以后才会显示出来
life_df = pd.read_excel(r'C:\Users\admin\Desktop\生活用品表.xlsx')
print(life_df.groupby("分类").count())
result:
编号 名称
分类
大件 3 3
家电 2 2
小说 1 1
水果 2 2
生活用品 4 4
食物 2 2
上面的代码是根据物品分类对所有数据进行了分组,然后对分组以后的数据分别进行计数运算,最后进行合并。
由于对分组后的数据进行了计数运算,因此每一列都会有一个结果。但是如果对分组后的结果做一些数值运算,这个时候只有数据类型是数值(int、float)的列才会参与运算
import pandas as pd
life_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
life_df = pd.read_excel(r'C:\Users\admin\Desktop\生活用品表.xlsx')
print(life_df.groupby(["分类", "名称"]).sum())
result:
编号
分类 名称
大件 冰箱 3
电视机 4
茶几 5
家电 冰箱 3
电视机 4
小说 红楼梦 8
水果 橙子 1
苹果 0
生活用品 冰箱 3
暖手宝宝 7
牙刷 2
电视机 4
食物 橙子 1
苹果 0
3 分组和聚合采用不同的列进行
上述1和2这2种方式,无论是一列还是多列,只要直接在分组后的数据上进行汇总计算,就是对所有可计算的列进行计算。有的时候我们不需要对所有列进行计算,这个时候可以指定要计算的列(无论是单列还是多列)
life_df = pd.read_excel(r'C:\Users\admin\Desktop\生活用品表.xlsx')
print(life_df.groupby("分类")["名称"].count())
result:
分类
大件 3
家电 2
小说 1
水果 2
生活用品 4
食物 2
Name: 名称, dtype: int64
这里就是按照物品分类进行分组,再按照物品名称进行汇总统计
转载自:https://juejin.cn/post/6993518513977557005