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

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关键字


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,335评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,895评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,766评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,918评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,042评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,169评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,219评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,976评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,393评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,711评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,876评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,562评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,193评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,903评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,699评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,764评论 2 351

推荐阅读更多精彩内容