美文网首页《利用Python进行数据分析》 第二版
《利用Python进行数据分析》 10.1 GroupBy机

《利用Python进行数据分析》 10.1 GroupBy机

作者: CCC考研 | 来源:发表于2018-12-04 13:09 被阅读30次

    10.1 GroupBy机制


    1.Hadley Wickham创造了用于描述组操作的术语拆分-应用-联合(split-apply-combine)

    第一步,数据包含在pandas对象中,可以是Series、DataFrame或其他数据结构

    第二步,根据你提供的一个或多个键分离到各个组中

    注:分离操作是在数据对象的特定轴向上进行的。例如,DataFrame可以在它的行方向(axis=0)或列方向(axis=1)进行分组

    第三步,函数就应用到各个组中,产生新的值

    第四步,所有函数的应用结果联合为一个结果对象

    注:结果对象的形式取决于对数据进行的操作

    示例:一个简单的分组聚合(见图10-1)

    图10-1:分组聚合图示

    2.分组键可是多种形式,并且键不一定是完全相同的类型

    (1)与需要分组的轴向长度一致的值列表或值数组

    (2) DataFrame的列名的值

    (3)可以将分组轴向上的值和分组名称相匹配的字典或Series

    (4) 可以在轴索引或索引中的单个标签上调用的函数

    注:后三种方法是可以产生用于分隔对象的值数组的快捷方式

    示例:DataFrame小型表格数据集(见图10-2)

    图10-2:Series型分组
    图10-2:利用多个键进行分组 图10-2:利用列名进行分组 图10-2:利用轴向长度一致的数组分组

    利用size()返回包含组大小信息的Series(见图10-3)

    图10-3:size()用法

    注:分组键中的任何缺失值将被排除在结果之外


    10.1.1遍历各分组


    1.GroupBy对象支持迭代,会生成一个包含组名和数据块的2维元组序列(见图10-4)

    图10-4 分组键迭代

    注:在多个分组键的情况下,元组中的第一个元素是键值的元组


    2.选择在任何一块数据上进行你想要的操作,使用一行代码计算出数据块的字典(见图10-5)

    图10-5:使用代码计算出数据块字典

    3.默认情况下,groupby在axis=0的轴向上分组,也可以在其他任意轴向上进行分组(见图10-6)

    图10-6:多轴向分组

    10.1.2 选择一列或所有列的子集


    1.从DataFrame创建的GroupBy对象用列名称或列名称数组进行索引时,产生用于聚合的列子集的效果

    df.groupby('key1')['data1']

    df.groupby('key1')[['data2']]

    是下面代码的语法糖:

    df['data1'].groupby(df['key1'])

    df[['data2']].groupby(df['key1'])    #Series分组键

    注:语法糖,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。


    2.处理大型数据,聚合少部分列

    示例:计算data2列均值(见图10-7)

    图10-7 :计算data2列均值

    注:如果传递的是列表或数组,则此索引操作返回的对象是分组的DataFrame;如果只有单个列名作为标量传递,则为分组的Series(见图10-8)

    图10-8:单个列名标量传递

    10.1.3 使用字典和Series分组


    1.使用字典分组 

    示例DataFrame:拥有各列的分组对应关系,把各列按组累加(见图10-9)

    图10-9:使用字典进行分组

    2.Series也有相同的功能,可以视为固定大小的映射(见图10-10)

    注:映射,两个元素的之间元素相互“对应”的关系

    图10-10:使用Serie分组

    10.1.4 使用函数分组


    1.利用Python函数分组是定义分组关系的一种通用的方式

    作为分组键传递的函数将会按照每个索引值调用一次,同时返回值会被用作分组名称

    示例:考虑上一节的示例DataFrame,其中人名作为索引值,计算字符串的长度作为分组名称(见图10-11)

    图10-11:利用函数分组

    2.将函数与数组、字典或Series进行混合,所有的对象都会在内部转换为数组(见图10-12)

    图10-12:混合分组

    10.1.5 根据索引层级分组


    1.分层索引的数据集的便利:能够在轴索引的某个层级上进行聚合

    示例:(见图10-13)

    图10-13:根据索引层级分组

    注:(1)pandas.MultiIndex.from_arrays

    classmethod MultiIndex.from_arrays(arrays,sortorder=None,names=None)

    Convert arrays to MultiIndex

    (2)根据层级分组时,将层级数值或层级名称传递给level关键字


    相关文章

      网友评论

        本文标题:《利用Python进行数据分析》 10.1 GroupBy机

        本文链接:https://www.haomeiwen.com/subject/qriucqtx.html