最近好忙啊,好忙啊,忙的写不动博客了

时间过得飞快

一晃,一周就过去了

本着不进步就倒退的性格

我成功的在技术上面划水了一周

今天要学习的还是groupby的高级进阶

说是高级,其实就是比初级复杂了一些

有点绕,然后不容易明白

就成为高级了

其实对于pandas来说

应该还是基础部分

我们今天要学习的就是

自定义更丰富的分组运算

apply 方法

apply方法的价值

对于有些数据类型来说

是的,有些

agg与transform 不是很适合

所以就会出现apply方法

不过哪些不适合,我们要慢慢细说啦

首先,我们先弄几个apply的例子,看看它到底能干啥

要测试,先造数据

import pandas as pd

df = pd.DataFrame({'A':['bob','sos','bob','sos','bob','sos','bob','bob'],
'B':['one','one','two','three','two','two','one','three'],
'C':[3,1,4,1,5,9,2,6],
'D':[1,2,3,4,5,6,7,8]})

数据造好,分组开始

grouped = df.groupby('A')

for name,group in grouped:
print(name)
print(group)

要想成为高手,这时候,你要开始写代码了

千万不能只看着

对的,你看着永远学不会的

相信橡皮擦



然后我们对结果应用apply方法

d = grouped.apply(lambda x:x.describe())
print(d)

lambda表达式,自己去百度下,关键字python lambda

就是个匿名函数,没啥难的

给分组之后的数据,同时应用 describe方法

当当当,结果展示为

对于apply()方法来说,它做了这么一个操作

将groupby分组好的数据,一组,一组,一组的传递到了函数里面

看好是一组,一组的传递进去

所以,呈现出一种多层级的结构

很难理解,是吧

没错,就是不好理解,要不难么

给你弄个图,理解理解



什么,还不理解

那这样,我们获取分组之后的前2条数据

新需求哦~

完整代码

import pandas as pd

df = pd.DataFrame({'A':['bob','sos','bob','sos','bob','sos','bob','bob'],
'B':['one','one','two','three','two','two','one','three'],
'C':[3,1,4,1,5,9,2,6],
'D':[1,2,3,4,5,6,7,8]}) grouped = df.groupby('A') for name,group in grouped:
print(name)
print(group) d = grouped.apply(lambda x:x.head(2))

你看看出来的数据



晓得了不,apply方法 会将分组后的数据一起传入

可以返回多维数据

厉害,厉害,虽然一般我只用最简单的

不用lambda,咱们在实现一下,可能更清楚一些

代码呢,你可以改成这个样子

def get_top(df):
return df.head(2) d = grouped.apply(get_top)

看,像高手的两把刷子了吧

然后,你还可以给传个参数进去

def get_top(df,n):
return df.head(n) d = grouped.apply(get_top,n=3) print(d)

apply方法也可以应用在series上面

自己去试试吧

最后,我需要一个使用apply最常用

也是最好用的方法

当然pandas这么厉害

肯定有很多办法可以替代的

填补空值

import pandas as pd

df = pd.DataFrame({'A':['bob','sos','bob','sos','bob','sos','bob','bob'],
'B':['one','one','two','three','two','two','one','three'],
'C':[3,1,4,1,5,9,None,6],
'D':[1,2,3,None,5,6,7,8]}) grouped = df.groupby('A') for name,group in grouped:
print(name)
print(group) def fill_none(one_group):
return one_group.fillna(one_group.mean()) # 把平均值填充到空值里面 d = grouped.apply(fill_none)
print(d)

完美,对应一下数据瞅瞅

好了,apply你学会了吗?

没学会,就在看一遍

书读百遍,该不会,还是不会

拿出手机,对着我的公主号,拍一拍

学习pandas apply方法,看这一篇就够了,你该这么学,No.10的更多相关文章

  1. 学习 Spring Boot 知识看这一篇就够了

    从2016年因为工作原因开始研究 Spring Boot ,先后写了很多关于 Spring Boot 的文章,发表在技术社区.我的博客和我的公号内.粗略的统计了一下总共的文章加起来大概有六十多篇了,其 ...

  2. Mybatis-Plus常用的查询方法--看这一篇就够了!!!

    前言: Mybatis-Plus作为Mybatis的增强,自己封装了很多简单还用的方法,来解脱自己写sql! 对于项目的搭建小编就不在说了,可以参考: SpringBoot+Mybatis-Plus的 ...

  3. [转帖]nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件

    nginx学习,看这一篇就够了:下载.安装.使用:正向代理.反向代理.负载均衡.常用命令和配置文件 2019-10-09 15:53:47 冯insist 阅读数 7285 文章标签: nginx学习 ...

  4. Elasticsearch学习,请先看这一篇!

    原文:Elasticsearch学习,请先看这一篇! 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn ...

  5. Java中的多线程=你只要看这一篇就够了

    如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其 ...

  6. 什么是 DevOps?看这一篇就够了!

    本文作者:Daniel Hu 个人主页:https://www.danielhu.cn/ 目录 一.前因 二.记忆 三.他们说-- 3.1.Atlassian 回答"什么是 DevOps?& ...

  7. 关于 Docker 镜像的操作,看完这篇就够啦 !(下)

    紧接着上篇<关于 Docker 镜像的操作,看完这篇就够啦 !(上)>,奉上下篇 !!! 镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌 ...

  8. JVM内存模型你只要看这一篇就够了

    JVM内存模型你只要看这一篇就够了 我是一只孤傲的鱼鹰 让我们不厌其烦的从内存模型开始说起:作为一般人需要了解到的,JVM的内存区域可以被分为:线程栈,堆,静态方法区(实际上还有更多功能的区域,并且这 ...

  9. 【java编程】ServiceLoader使用看这一篇就够了

    转载:https://www.jianshu.com/p/7601ba434ff4 想必大家多多少少听过spi,具体的解释我就不多说了.但是它具体是怎么实现的呢?它的原理是什么呢?下面我就围绕这两个问 ...

随机推荐

  1. python自动华 (十四)

    Python自动化 [第十四篇]:HTML介绍 本节内容: Html 概述 HTML文档 常用标签 2. CSS 概述 CSS选择器 CSS常用属性 1.HTML 1.1概述 HTML是英文Hyper ...

  2. 003_STM32程序移植之_W25Q64

    1. 测试环境:STM32C8T6 2. 测试模块:W25Q64FLASH模块 3. 测试接口: 1. W25Q64FLASH模块接口: VCC3.3--------------------VCC3. ...

  3. bufferedinputstream FileInputStream inputstream的比较

    BufferedInputStream类相比InputStream类,提高了输入效率,增加了输入缓冲区的功能 不带缓冲的操作,每读一个字节就要写入一个字节,由于涉及磁盘的IO操作相比内存的操作要慢很多 ...

  4. Linux进程通信之mmap

    mmap()函数: void *mmap(void* addr,size_t length,int port,int flags,int fd,off_t offset); 返回:成功:返回创建的映射 ...

  5. 最简单的babel+webpack配置

    首先先介绍一下2个重要的库:core-js 和 regenerator core-js core-js 是用于 JavaScript 的组合式标准化库,它包含 es5 (e.g: object.fre ...

  6. 8月清北学堂培训 Day1

    今天是赵和旭老师的讲授~ 动态规划 动态规划的基本思想 利用最优化原理把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解. 更具体的,假设我们可以计算出小问题的最优解,那么我们凭借此可 ...

  7. spring相关知识点易错

    1.spring不支持静态变量注入,即不能再static变量上面加@Resoure 要是想注入的话就用set方法注入 private static ComboPooledDataSource pool ...

  8. IntelliJ IDEA 设置忽略SVN文件和文件夹

       IntelliJ IDEA 在提交文件至SVN时,可以设置忽略某些文件和文件夹,以免误提交不需要提交的文件.最后,插个题外话,介绍一下如何设置代码默认折叠或者展开.下面使用IntelliJ ID ...

  9. Gym - 100199C

    Gym - 100199C 题意: 其实这么长的英文题面就是想告诉我们这个题是丢手绢. 解法: 找到与 $ N $ 互质的最大整数 $ K $ 即可.当 $ N $ 为奇数时, $ \frac{N-1 ...

  10. ubuntu下安装g++

    主要来自ubuntu中文社区http://www.ubuntu.org.cn/support/documentation/doc/VMware 首选,确认你已经安装了build-essential程序 ...