Pandas学习总结——3. Pandas分组

Posted kaifengguan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas学习总结——3. Pandas分组相关的知识,希望对你有一定的参考价值。




  • SAC过程(split-apply-combine):其中split指基于某一些规则,将数据拆成若干组,apply是指对每一组独立地使用函数,combine指将每一组的结果组合成某一类数据结构。
  • apply过程:往往会遇到四类问题:
    • 整合(Aggregation)——即分组计算统计量(如求均值、求每组元素个数)
    • 变换(Transformation)——即分组对每个单元的数据进行操作(如元素标准化)
    • 过滤(Filtration)——即按照某些规则筛选出一些组(如选出组内某一指标小于50的组)
    • 综合问题——即前面提及的三种问题的混合

1 groupby函数

1.1 分组的依据

  • 根据某一列分组:grouped_single = df.groupby(‘School‘)
    • 可以通过get_group()取出某一个组。
  • 根据某几列分组:grouped_mul = df.groupby([‘School‘,‘Class‘])
  • 通过size()获取组容量
  • 通过ngroup()获取组数

1.2 组的遍历

for name,group in grouped_single:
    print(name)
    display(group.head(1))

技术图片

1.3 level参数(用于多级索引)和axis参数

df.set_index([‘Gender‘,‘School‘]).groupby(level=0,axis=0).get_group(‘M‘)

1.4 groupby对象的特点

  • head()first():对分组对象使用head函数,返回的是每个组的前几行,而不是数据集前几行;first显示的是以分组为索引的每组的第一个分组信息
grouped_single.head(2)

grouped_single.first()
  • groupby的分组依据很自由,可以是列表和函数。(要与数据框长度相同)
  • 利用函数时,传入的对象就是索引;如果是多层索引,那么lambda表达式中的输入就是元组
  • 可以用[]选出groupby对象的某个或者某几个列。如:df.groupby([‘Gender‘,‘School‘])[[‘Math‘,‘Height‘]]
  • 利用cut()函数对数字进行分组。bins参数为分组列表。

2 聚合、过滤和变换

2.1 聚合(Aggregation)

所谓聚合就是把一堆数,变成一个标量,因此mean/sum/size/count/std/var/sem/describe/first/last/nth/min/max都是聚合函数。

  • 聚合函数可以同时使用多个:
group_m.agg([‘sum‘,‘mean‘,‘std‘])

技术图片

  • 利用元组重命名:
group_m.agg([(‘rename_sum‘,‘sum‘),(‘rename_mean‘,‘mean‘)])

技术图片

  • 指定哪些函数作用哪些列.
grouped_mul.agg({‘Math‘:[‘mean‘,‘max‘],‘Height‘:‘var‘})

技术图片

  • 使用自定义函数:(通过agg可以容易地实现组内极差计算)
grouped_single[‘Math‘].agg(lambda x:x.max()-x.min())
  • 利用NamedAgg函数进行多个聚合(注意:不支持lambda函数,但是可以使用外置的def函数
def R1(x):
    return x.max()-x.min()
def R2(x):
    return x.max()-x.median()
print(grouped_single[‘Math‘].max())
grouped_single[‘Math‘].agg(min_score1=pd.NamedAgg(column=‘col1‘, aggfunc=R1),
                           max_score1=pd.NamedAgg(column=‘col2‘, aggfunc=‘max‘),
                           range_score2=pd.NamedAgg(column=‘col3‘, aggfunc=R2)).head()

技术图片

以上是关于Pandas学习总结——3. Pandas分组的主要内容,如果未能解决你的问题,请参考以下文章

pandas常见用法总结:数据筛选,过滤,插入,删除,排序,分组聚合等

pandas常见用法总结:数据筛选,过滤,插入,删除,排序,分组聚合等

pandas的学习总结

数据分析之Pandas合并操作总结

pandas基础(part4)--排序/分组/合并

pandas数据分组