开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第26天,点击查看活动详情
分组后统计
数据统计(也称为数据聚合)是数据处理的最后一步,通常是要使每一个数组生成一个单一的数值。
上面我们已经了解了一些Pandas提供好的统计函数,例 如 :mean() 、max() 等函数 。
为大家使用更为灵活 ,pandas提供了一个 agg( )方法用来对分组后的数据进行统计。
接下来我们来体验一下,agg()方法的使用:
import pandas as pd
df = pd.read_excel("")
groups = df.groupby('gender')
for goup_name,group_id in groups:
f_se = group_df['agg'].agg(['max','min','mean'])
prnt('{}组的最大年龄是{},最小年龄是{},平均年龄是{}'.format(group_name,f_se[0],f_se[1],f_se[2])
观察上面的代码,可以发现在使用agg()函数时,我们可以将多个统计函数一起放到一个agg()函数中。并且需要注意的是,如果是统计函数是pandas提供的,我们只需将函数的名字以字符串的形势存储到列表中即可
例如:将max()改成'max'。
这样不仅简化了我们的代码,在添加和删减统计函数的时候我们只需更改agg()函数中list就可以了。是不是很方便。它的好处还不止这些,比如现在又有新的需求,要计算年龄的最大值和最小值的差值。但是,pandas并没有提供这样统计函数,所以就需要我们进行自己定义一个统计函数:
def peak_range(df):
"""
返回数值范围
"""
return df.max()-df.min()
现在我们看一下自己定义的统计函数,如何使用
import pandas as pd
df = pd.read_excel("")
groups = df.groupby('gender')
def peak_range(df):
"""
返回数值范围
"""
return df.max()-df.min()
for goup_name,group_id in groups:
f_se = group_df['agg'].agg(['max','min','mean',peak_range()])
print(f_se[0],f_se[1],f_se[3])
peak_range(df)函数是我们自定的函数,并设置了一个df参数,为了接收group_df['age']的值。
注意:自定义的函数名字在传入agg()函数中时不需要转换成字符串。
总结
数据分组
- 使用
groupby()方法进行分组 group.size()查看分组后每组的数量group.groups()查看分组情况group.get_group('F')根据分组后的名字选择分组数据
对分组进行遍历
- 使用 for …in…可以对分组后的对象进行遍历
- 遍历时刻获取两个对象,分组后的名字和对应的数据
按多列进行分组
- 使用
groupby()方法进行按多列分组 - 将多个列名放到列表中传给
groupby()做参数 - 分组后的数据会有多层索引,获取数据需要从外到里逐层获取