文章目录

  • 使用内置统计方法聚合数据
  • 面向列的聚合方法
    • aggregate()方法
    • 对每一列数据应用同一个函数
    • 对某列数据应用不同的函数
    • 对不同列数据应用不同函数

使用内置统计方法聚合数据

实现数据拆分成组并分别计算平均数的操作

代码:

import pandas as pd
import numpy as npdf = pd.DataFrame({'key1': ['A', 'A', 'B', 'B', 'A'],'key2': ['one', 'two', 'one', 'two', 'one'],'data1': [2, 3, 4, 6, 8],'data2': [3, 5, np.nan, 3, 7]})
print(df.groupby('key1').mean())

输出结果:

         data1  data2
key1
A     4.333333    5.0
B     5.000000    3.0

可以看到的是,如果参与运算的数据中有NaN值,会自动将这些NaN值过滤掉


面向列的聚合方法

当内置方法无法满足聚合要求时,可以自定义一个函数,将它传给agg()方法(pandas 0.20版本后,aggregate()方法与agg()方法用法一样)。

aggregate()方法

aggregate(self, func=None, *args, **kwargs)

上述方法中部分参数表示的含义如下:

  1. func:表示用于汇总数据的函数,可以为单个函数或函数列表
  2. axis:表示函数作用于轴的方向,0或1,index或columns

通过aggregate()方法进行聚合时,func参数既可以接受Pandas中的内置方法,也可以接受自定义的函数,同时,这些方法与函数可以作用于每一列,也可以将多个函数或方法作用于同一列,还可以将不同函数或方法作用于不同的列


对每一列数据应用同一个函数

创建测试对象:

df1 = DataFrame(np.arange(36).reshape(6, 6),columns=list('abcdef'))
df1['key'] = Series(list('aaabbb'), name='key')
print(df1)

输出结果:

 a   b   c   d   e   f key
0   0   1   2   3   4   5   a
1   6   7   8   9  10  11   a
2  12  13  14  15  16  17   a
3  18  19  20  21  22  23   b
4  24  25  26  27  28  29   b
5  30  31  32  33  34  35   b

接下来对测试对象以“key“列为分组键进行拆分,并通过字典的形式分别打印出每个分组的具体内容。

进行拆分

df1_group = df1.groupby(by='key')
print(dict([i for i in df1_group])['a'])
print(dict([i for i in df1_group])['b'])

输出结果:

 a   b   c   d   e   f key
0   0   1   2   3   4   5   a
1   6   7   8   9  10  11   a
2  12  13  14  15  16  17   aa   b   c   d   e   f key
3  18  19  20  21  22  23   b
4  24  25  26  27  28  29   b
5  30  31  32  33  34  35   b

上述过程中,先调用groupby()方法,按key一列的数据将df1对象进行分为a、b两组,然后使用列表推导式([i for i in df1_group])遍历分组对象df1_group,得到每个分组的列表,之后将装有分组的列表强转换为字典,其中字典中的键为a和b,字典的值分别为分组的具体内容。之后通过“字典[组名]”的形式,分别查看a、b组数据。


当然也可以用for循环直接两组一起输出

for i in df1_group:print(i)

输出结果

('a',     a   b   c   d   e   f key
0   0   1   2   3   4   5   a
1   6   7   8   9  10  11   a
2  12  13  14  15  16  17   a)
('b',     a   b   c   d   e   f key
3  18  19  20  21  22  23   b
4  24  25  26  27  28  29   b
5  30  31  32  33  34  35   b)


接下来,对每个分组的数据进行聚合运算。

调用内置的求和方法sum():

print("sum:\n", df1_group.aggregate(sum))

输出结果:

sum:a   b   c   d   e   f
key
a    18  21  24  27  30  33
b    72  75  78  81  84  87

自定义一个实现求极差值(极差值 = 最大值 - 最小值)的函数,然后将其作为参数传入aggregate()方法中:

def range_df1_group(arr):return arr.max() - arr.min()print("极差值:\n", df1_group.aggregate(range_df1_group))

输出结果:

极差值:a   b   c   d   e   f
key
a    12  12  12  12  12  12
b    12  12  12  12  12  12

对某列数据应用不同的函数

如今要求不仅要求出每组数据的极差,还要计算出每组数据的和。这是可将两个函数的名称放在列表中,之后在调用aggregate()方法聚合时作为参数传入即可。

代码实现:

print("sum and 极差值:\n", df1_group.aggregate(func=[sum, range_df1_group]))

输出结果:

sum and 极差值:a                   b  ...               e   f                sum range_df1_group sum  ... range_df1_group sum range_df1_group
key                          ...
a    18              12  21  ...              12  33              12
b    72              12  75  ...              12  87              12[2 rows x 12 columns]

从输出结果可以看出,生成的DataFrame对象具有两层索引,每个外层列索引包含两个内层列索引,分别以函数的名称range_df1_group和sum命名。

虽然每一列可以应用不同的函数,但是结果并不能很直观地辨别出每个函数代表的意义。为了更好地反映出每列对应地数据的信息, 可以使用“(name,function)”元组将function(函数名)替换为name(自定义名称)。

代码实现:

print("极差值 and sum:\n",
df1_group.aggregate([("极差", range_df1_group), ("和", sum)]))

输出结果:

极差值 and sum:a       b       c       d       e       f    极差   和  极差   和  极差   和  极差   和  极差   和  极差   和
key
a    12  18  12  21  12  24  12  27  12  30  12  33
b    12  72  12  75  12  78  12  81  12  84  12  87

区别其实就是不会出现列名过长导致的无法显示全的问题了


对不同列数据应用不同函数

如果希望实现对不同列数据应用不同函数,咋可以在aggregate()方法中传入一个{“列名”:“函数名”}格式的字典。

代码实现:

print("综合:\n",
df1_group.aggregate({'a': 'sum', 'b': range_df1_group, 'c': 'mean'})

输出结果:

综合:a   b   c
key
a    18  12   8
b    72  12  26

上例中,使用不同的函数对每个分组执行聚合运算,其中a列执行求和运算,b列执行求极差计算,c列执行求平均值计算。自定义函数不需要加引号。


aggregate()方法执行聚合操作时,会将一组标量值参与某些运算后转换为一个标量值。

Python之数据聚合——aggregate()方法相关推荐

  1. Python数据聚合的方法

    本文主要讲解Python中的数据聚合的函数,函数主要由两个:size(),count(): size 跟 count 的区别: 1.count()方法用于统计字符串里某个字符出现的次数.可选参数为在字 ...

  2. Python之数据聚合与分组运算

    Python之数据聚合与分组运算 1. 关系型数据库方便对数据进行连接.过滤.转换和聚合. 2. Hadley Wickham创建了用于表示分组运算术语"split-apply-combin ...

  3. python pandas 拿取表格中两个列_在家憋着也是憋着,不如来学习一下python数据聚合的方法...

    #python打卡##Python数学编程##python##统计##大数据# 在实际工作过程中,我们经常会遇到对数据进行聚合的情况.针对这种数据聚合的结果,我们又称之为透视表.透视表是各种电子表格程 ...

  4. python数据分析————数据聚合与分组运算

    分组:使⽤特定的条件将原数据划分为多个组 聚合:对每个分组中的数据执⾏某些操作,最后将计算的结果进⾏整合 groupby⽅法参数 说明 by ⽤于确定进⾏分组的依据 axis 表⽰分组轴的⽅向 sor ...

  5. python分析数据差异的方法_用Python的两种方法进行方差分析

    在进行数据分析时,我们往往会遇到要对某个变量的影响因素进行分析的情况,而影响一事物的因素往往是很多的.比如在化工生产中,有温度.压力.剂量.反应时间等因素.每一因素的改变都有可能影响产品的数量和质量. ...

  6. Mongodb数据 ,聚合 aggregate

    聚合 aggregate 聚合(aggregate)主要用于计算数据,类似sql中的sum().avg() 语法 db.集合名称.aggregate([{管道:{表达式}}]) 管道 管道在Unix和 ...

  7. Python之数据拆分——groupby()方法

    文章目录 groupby()方法 通过列名进行分组 通过Series对象进行分组 Series对象与原数据的行索引长度相等 Series对象与原数据的行索引长度不等 通过字典进行分组 按照column ...

  8. python金融数据导入的方法

    初学篇–数据导入 1.国内股票的数据: 2.国际股票的数据: 3.网页的数据: 4.本地的数据传入python分析: (一)数据导入 1.国内股票的数据–tushare包(安装pip install ...

  9. python对数据分组的方法

    pandas 的cut函数完成数据分组 cut(Series,bins,right = True,labels = null ) Series:需要分组的数据[数据框的某列数据] bins:分组的划分 ...

最新文章

  1. 50个“杀手级”AI项目 !(附链接)
  2. 1037:计算2的幂
  3. 决策树-CART算法
  4. 何时使用领域驱动设计
  5. c语言中文件读写面试题,在C ++中有效读取非常大的文本文件
  6. 证书体系: PFX 文件格式解析
  7. 数学建模学习笔记(八)——分类模型
  8. NumPy Beginner's Guide 2e 带注释源码 三、熟悉 NumPy 常用函数
  9. 一线数分师天天被喷不值钱,数据分析师如何“刷存在感”?
  10. js正则表达式——数字校验
  11. 宋宝华_2010年11-12月Linux驱动和内核讲座PPT下载
  12. 企业网管服务器架设资料(极品中的极品)
  13. 基础—数学—Exponential Family
  14. TensorFlow Session 中关于 GPU 的配置项解析 ——转自 慢慢学TensorFlow 微信公众号
  15. 逻辑强化(03)真假推理 知识练习
  16. 哈尔滨计算机管理,哈尔滨戴斯酒店计算机管理系统.doc
  17. java函数修饰符_Java 函数 面向对象,修饰符,类,构造方法,this
  18. PHP SQL 注入攻击的技术实现以及预防办法
  19. INS/GNSS组合导航(十二)如何读懂MEMS惯性器件精度?
  20. 跨境电商的支付方式有哪些?

热门文章

  1. 搭建Windows Embedded Compact 7开发环境
  2. am335x otg-usb
  3. WinCE中得Catalog Items前的标记图标的意义总结
  4. 在线打开html文件,html是什么文件?html文件怎么打开?
  5. 創建oracle用戶及表空間,window,linux下創建oracle用戶及表空間 對比 易於學習
  6. 神经网络与深度学习——TensorFlow2.0实战(笔记)(三)(python语句)
  7. 【转】30分钟学会UML类图
  8. 【转】开机出现 error:file “/boot/grub/i386-pc/normal.mod“ not found 错误提示
  9. 第二十一节:ADO层次上的海量数据处理方案(SqlBulkCopy类插入和更新)
  10. 当爬虫工程师遇到 CTF丨2021 年 B 站 1024 安全攻防题解