一、groupby 能做什么?

python中groupby函数主要的作用是进行数据的分组以及分组后地组内运算!

对于数据的分组和分组运算主要是指groupby函数的应用,具体函数的规则如下:

df[](指输出数据的结果属性名称).groupby([df[属性],df[属性])(指分类的属性,数据的限定定语,可以有多个).mean()(对于数据的计算方式——函数名称)
举例如下:
print(df["评分"].groupby([df["地区"],df["类型"]]).mean())
#上面语句的功能是输出表格所有数据中不同地区不同类型的评分数据平均值

二、单类分组

A.groupby("性别")

首先,我们有一个变量A,数据类型是DataFrame

想要按照【性别】进行分组

得到的结果是一个Groupby对象,还没有进行任何的运算。

describe()

描述组内数据的基本统计量

A.groupby("性别").describe().unstack()

* 只有数字类型的列数据才会计算统计

* 示例里面数字类型的数据有两列 【班级】和【身高】

但是,我们并不需要统计班级的均值等信息,只需要【身高】,所以做一下小的改动:

A.groupby("性别")["身高"].describe().unstack()

unstack()

索引重排

上面的例子里面用到了一个小的技巧,让运算结果更便于对比查看,感兴趣的同学可以自行去除unstack,比较一下显示的效果

三、多类分组

A.groupby( ["班级","性别"])

单独用groupby,我们得到的还是一个 Groupby 对象。

mean()

组内均值计算

DataFrame的很多函数可以直接运用到Groupby对象上。

上图截自 pandas 官网 document,这里就不一一细说。

我们还可以一次运用多个函数计算

A.groupby( ["班级","性别"]).agg([np.sum, np.mean, np.std]) # 一次计算了三个

agg()

分组多个运算

四、时间分组

时间序列可以直接作为index,或者有一列是时间序列,差别不是很大。

这里仅仅演示,某一列为时间序列。

为A 新增一列【生日】,由于分隔符 “/” 的问题,我们查看列属性,【生日】的属性并不是日期类型

我们想做的是:

1、按照【生日】的【年份】进行分组,看看有多少人是同龄?

A["生日"] = pd.to_datetime(A["生日"],format ="%Y/%m/%d")  # 转化为时间格式
A.groupby(A["生日"].apply(lambda x:x.year)).count() # 按照【生日】的【年份】分组

进一步,我们想选拔:

2、同一年作为一个小组,小组内生日靠前的那一位作为小队长:

A.sort_values("生日", inplace=True)  # 按时间排序
A.groupby(A["生日"].apply(lambda x:x.year),as_index=False).first()

as_index=False

保持原来的数据索引结果不变

first()

保留第一个数据

Tail(n=1)

保留最后n个数据

再进一步:

3、想要找到哪个月只有一个人过生日

A.groupby(A["生日"].apply(lambda x:x.month),as_index=False)  # 到这里是按月分组
A.groupby(A["生日"].apply(lambda x:x.month),as_index=False).filter(lambda x: len(x)==1)

filter()

对分组进行过滤,保留满足()条件的分组

以上就是 groupby 最经常用到的功能了。

用 first(),tail()截取每组前后几个数据

用 apply()对每组进行(自定义)函数运算

用 filter()选取满足特定条件的分组

 

python中groupby函数详解(非常容易懂)的更多相关文章

  1. Python中time模块详解

    Python中time模块详解 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. ...

  2. python基础之函数详解

    Python基础之函数详解 目录 Python基础之函数详解 一.函数的定义 二.函数的调用 三.函数返回值 四.函数的参数 4.1 位置参数 4.2 关键字参数 实参:位置实参和关键字参数的混合使用 ...

  3. JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解

    二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...

  4. python中threading模块详解(一)

    python中threading模块详解(一) 来源 http://blog.chinaunix.net/uid-27571599-id-3484048.html threading提供了一个比thr ...

  5. 【转】linux 中fork()函数详解

    在看多线程的时候看到了这个函数,于是学习了下,下面文章写的通俗易懂,于是就开心的看完了,最后还是很愉快的算出了他最后一个问题. linux 中fork()函数详解 一.fork入门知识 一个进程,包括 ...

  6. 第7.19节 Python中的抽象类详解:abstractmethod、abc与真实子类

    第7.19节 Python中的抽象类详解:abstractmethod.abc与真实子类 一.    引言 前面相关的章节已经介绍过,Python中定义某种类型是以实现了该类型对应的协议为标准的,而不 ...

  7. Python内置函数详解

    置顶   内置函数详解 https://docs.python.org/3/library/functions.html?highlight=built#ascii https://docs.pyth ...

  8. Linux中fork()函数详解(转载)

    linux中fork()函数详解 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事, ...

  9. python pandas字符串函数详解(转)

     pandas字符串函数详解(转)——原文连接见文章末尾 在使用pandas框架的DataFrame的过程中,如果需要处理一些字符串的特性,例如判断某列是否包含一些关键字,某列的字符长度是否小于3等等 ...

随机推荐

  1. 1012 The Best Rank (25分) vector与结构体排序

    1012 The Best Rank (25分)   To evaluate the performance of our first year CS majored students, we con ...

  2. spring boot 中 Cache 的使用

    参考:https://blog.csdn.net/qq_38974634/article/details/80650810 一.JSR107 Java Caching 定义5个核心的接口,分别是Cac ...

  3. Lamda表达式学习笔记一

    Lamda表达式学习笔记一 一.Lamda语法诠释 三傻大闹宝莱坞的主人公兰彻说的一句话让我映像深刻:用简单的语言来表达同样的意 我并不是说书上的定义怎么怎么不对,而是应该理解书本上的定义,并用简单的 ...

  4. 深入理解Java虚拟机-如何利用VisualVM对高并发项目进行性能分析

    前面在学习JVM的知识的时候,一般都需要利用相关参数进行分析,而分析一般都需要用到一些分析的工具,因为一般使用IDEA,而VisualVM对于IDEA也不错,所以就选择VisualVM来分析JVM性能 ...

  5. windows索引服务

        windows索引服务是windows操作系统提供的桌面搜索引擎,通过预先创建索引来提高对硬盘上文件内容的搜索速度.以windows服务程序的方式运行. 一.工作方式 1.对指定路径下的文件创 ...

  6. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:默认/标准按钮

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. idea增删改查

    idea应用mybatis写增删改查 entity层 private Integer id;private String userCode;private String userName;privat ...

  8. zabbix开启对中文的支持--&&--中文乱码解决方法

    zabbix不支持中文图 开启zabbix对中文的支持 原来zabbix默认把对中文的支持给关闭了,我们需要修改zabbix的php源文件. 修改站点根目录下include/locales.inc.p ...

  9. 五、ibatis中#和$的区别和使用

    1.#和$两者含义不同#:会进行预编译,而且进行类型匹配:$:不进行数据类型匹配.示例:变量name的类型是string, 值是"张三"    $name$ = 张三    #na ...

  10. boost::thread demo

    #include <iostream> #include <boost/date_time/gregorian/gregorian.hpp> #include <boos ...