在对数据进行分组之后,可以对分组后的数据进行聚合处理统计。

agg函数,agg的形参是一个函数会对分组后每列都应用这个函数。

import pandas as pd
import numpy as np
idx = [101,101,101,102,102,102,103,103,103]
idx += [101,102,103]
name = ["apple","pearl","orange", "apple","pearl","orange","apple","pearl","orange"]
name += ["apple"] * 3
price = [1.0,2.0,3.0,4.00,5.0,6.0,7.0,8.0,9.0]
price += [4] * 3
df0 = pd.DataFrame({ "fruit": name, "price" : price, "supplier" :idx})
print "*" * 30
print df0
print "*" * 30
dg1 = df0.groupby(["fruit", "supplier"])
for n, g in dg1:
print "multiGroup on:", n, "\n|",g ,"|"
print "*" * 30
print dg1.agg(np.mean)

程序的执行结果:

******************************
fruit price supplier
0 apple 1 101
1 pearl 2 101
2 orange 3 101
3 apple 4 102
4 pearl 5 102
5 orange 6 102
6 apple 7 103
7 pearl 8 103
8 orange 9 103
9 apple 4 101
10 apple 4 102
11 apple 4 103
******************************
multiGroup on: ('apple', 101)
| fruit price supplier
0 apple 1 101
9 apple 4 101 |
...
multiGroup on: ('pearl', 103)
| fruit price supplier
7 pearl 8 103 |
******************************
price
fruit supplier
apple 101 2.5
102 4.0
103 5.5
orange 101 3.0
102 6.0
103 9.0
pearl 101 2.0
102 5.0
103 8.0

请注意水果apple的输出。

  • agg应用均值、求和、最大等示例。

    import pandas as pd
    import numpy as np
    idx = [101,101,101,102,102,102,103,103,103]
    idx += [101,102,103] * 3
    name = ["apple","pearl","orange", "apple","pearl","orange","apple","pearl","orange"]
    name += ["apple"] * 3 + ["pearl"] * 3 + ["orange"] * 3
    price = [4.1,5.3,6.3,4.20,5.4,6.0,4.5,5.5,6.8]
    price += [4] * 3 + [5] * 3 + [6] * 3
    df0 = pd.DataFrame({ "fruit": name, "price" : price, "supplier" :idx})
    print "*" * 30
    print df0
    print "*" * 30
    dg1 = df0.groupby(["fruit", "supplier"])
    print dg1.agg(np.mean)
    print "*" * 30
    print dg1.agg([np.mean, np.std, np.min, np.sum])
  • 程序执行结果:

    ******************************
    fruit price supplier
    0 apple 4.1 101
    ...
    17 orange 6.0 103
    ******************************
    price
    fruit supplier
    apple 101 4.05
    102 4.10
    103 4.25
    orange 101 6.15
    102 6.00
    103 6.40
    pearl 101 5.15
    102 5.20
    103 5.25
    ******************************
    price
    mean std amin sum
    fruit supplier
    apple 101 4.05 0.070711 4 8.1
    102 4.10 0.141421 4 8.2
    103 4.25 0.353553 4 8.5
    orange 101 6.15 0.212132 6 12.3
    102 6.00 0.000000 6 12.0
    103 6.40 0.565685 6 12.8
    pearl 101 5.15 0.212132 5 10.3
    102 5.20 0.282843 5 10.4
    103 5.25 0.353553 5 10.5

     

各列用不同的处理函数。需要在agg函数里以字典的形式给出,分组后的那列用那个函数处理。

import pandas as pd
import numpy as np
idx = [101,101,101,102,102,102,103,103,103]
idx += [101,102,103] * 3
name = ["apple","pearl","orange", "apple","pearl","orange","apple","pearl","orange"]
name += ["apple"] * 3 + ["pearl"] * 3 + ["orange"] * 3
price = [4.1,5.3,6.3,4.20,5.4,6.0,4.5,5.5,6.8]
price += [4] * 3 + [5] * 3 + [6] * 3
df0 = pd.DataFrame({ "fruit": name, "price" : price, "supplier" :idx})
print "*" * 30
print df0
print "*" * 30
dg1 = df0.groupby(["fruit"])
print dg1.agg(np.mean)
print "*" * 30
print dg1.agg([np.mean, np.std, np.min, np.sum])
print "*" * 30
print dg1.agg({"price" : np.mean, "supplier" : np.max})

程序的执行结果:

******************************
fruit price supplier
0 apple 4.1 101
1 pearl 5.3 101
2 orange 6.3 101
3 apple 4.2 102
4 pearl 5.4 102
5 orange 6.0 102
6 apple 4.5 103
7 pearl 5.5 103
8 orange 6.8 103
9 apple 4.0 101
10 apple 4.0 102
11 apple 4.0 103
12 pearl 5.0 101
13 pearl 5.0 102
14 pearl 5.0 103
15 orange 6.0 101
16 orange 6.0 102
17 orange 6.0 103
******************************
price supplier
fruit
apple 4.133333 102
orange 6.183333 102
pearl 5.200000 102
******************************
price supplier
mean std amin sum mean std amin sum
fruit
apple 4.133333 0.196638 4 24.8 102 0.894427 101 612
orange 6.183333 0.325064 6 37.1 102 0.894427 101 612
pearl 5.200000 0.228035 5 31.2 102 0.894427 101 612
******************************
supplier price
fruit
apple 103 4.133333
orange 103 6.183333
pearl 103 5.200000

agg函数是对列而言的,如果打算对分组后列的数据进行处理可以使用tranform函数,见下一章。

Pandas的数据分组-aggregate聚合的更多相关文章

  1. pandas学习(数据分组与分组运算、离散化处理、数据合并)

    pandas学习(数据分组与分组运算.离散化处理.数据合并) 目录 数据分组与分组运算 离散化处理 数据合并 数据分组与分组运算 GroupBy技术:实现数据的分组,和分组运算,作用类似于数据透视表 ...

  2. 小白学 Python 数据分析(11):Pandas (十)数据分组

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  3. pandas中数据聚合【重点】

    数据聚合 数据聚合是数据处理的最后一步,通常是要使每一个数组生成一个单一的数值. 数据分类处理: 分组:先把数据分为几组 用函数处理:为不同组的数据应用不同的函数以转换数据 合并:把不同组得到的结果合 ...

  4. pandas分组和聚合

    Pandas分组与聚合 分组 (groupby) 对数据集进行分组,然后对每组进行统计分析 SQL能够对数据进行过滤,分组聚合 pandas能利用groupby进行更加复杂的分组运算 分组运算过程:s ...

  5. 利用Python进行数据分析-Pandas(第五部分-数据规整:聚合、合并和重塑)

    在许多应用中,数据可能分散在许多文件或数据库中,存储的形式也不利于分析.本部分关注可以聚合.合并.重塑数据的方法. 1.层次化索引 层次化索引(hierarchical indexing)是panda ...

  6. MySQL聚合函数与数据分组

    我们最常需要的是汇总数据而不是把他们实际检索出来 确定表中行数(或满足某个条件或包含某个特定值的行数) 确定表中行组的和 找出表列(或所有行或特定列)的最大值,最小值和平均值 聚集函数是运行在行组上, ...

  7. python中pandas数据分析基础3(数据索引、数据分组与分组运算、数据离散化、数据合并)

    //2019.07.19/20 python中pandas数据分析基础(数据重塑与轴向转化.数据分组与分组运算.离散化处理.多数据文件合并操作) 3.1 数据重塑与轴向转换1.层次化索引使得一个轴上拥 ...

  8. pandas中的分组技术

    目录 1  分组操作 1.1  按照列进行分组 1.2  按照字典进行分组 1.3  根据函数进行分组 1.4  按照list组合 1.5  按照索引级别进行分组 2  分组运算 2.1  agg 2 ...

  9. MongoDB学习(使用分组、聚合和映射-归并)

    使用分组.聚合和映射-归并 MongoDB的强大功能之一,是直接在服务器对文档的值进行复杂的操作,而不用先发文档发送到客户端在进行处理. 结果分组 对大型数据集进行查询操作时,通常会根据文档的字段值对 ...

随机推荐

  1. RMAN迁移数据库(不改变文件目录)

    1.目标库创建相应目录mkdir -p /u01/app/oracle/oradata/orclmkdir -p /u01/app/oracle/fast_recovery_area/ORCLmkdi ...

  2. Python命令行模块(sys.argv,argparse,click)

    Python作为一门脚本语言,经常作为脚本接受命令行传入参数,Python接受命令行参数大概有三种方式.因为在日常工作场景会经常使用到,这里对这几种方式进行总结. 命令行参数模块 这里命令行参数模块平 ...

  3. SQL Server NULL值用法及处理详解

    用法如下: 1.如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录,这意味着该字段将以 NULL 值保存. 2.NULL 用作未知的或不适用的值的占位符. 3.定 ...

  4. 详解双向链表的基本操作(C语言)

    @ 目录 1.双向链表的定义 2.双向链表的创建 3.双向链表的插入 4.双向链表的删除 5.双向链表更改节点数据 6.双向链表的查找 7.双向链表的打印 8.测试函数及结果 1.双向链表的定义 上一 ...

  5. Docker(二):Docker镜像仓库Harbor搭建

    安装docker-compose 因为docker-compose下载容易失败, 所以选择从github下载方式安装. [root@harbor ~]# mv docker-compose-Linux ...

  6. 怎样用Java 8优雅的开发业务

    怎样用Java 8优雅的开发业务 目录 怎样用Java 8优雅的开发业务 函数式编程 流式编程 基本原理 案例 优雅的空处理 新的并发工具类CompletableFuture 单机批处理多线程执行模型 ...

  7. 彻底理解Spring如何解决循环依赖

    Spring bean生命周期 可以简化为以下5步. 1.构建BeanDefinition 2.实例化 Instantiation 3.属性赋值 Populate 4.初始化 Initializati ...

  8. IIS本地部署局域网可随时访问的项目

    原理 在本机的IIS下创建一个网站,文件目录直接指向Web项目文件夹 步骤 1.项目的启动项目为web 2.在iis中创建一个新的网站(Work_TK_EIS) 文件目录为web项目的目录(D:\Gi ...

  9. sql中筛选条件为空值

    <select id="getEmployeeBasicInformationList" resultType="org.springblade.entity.Al ...

  10. MySQL中的模糊查询 like 和 Oracle中的 instr() 函数有同样的查询效果

    注:MySQL中的模糊查询 like 和 Oracle中的 instr() 函数有同样的查询效果: 如下所示: MySQL: select * from tableName where name li ...