学习pandas apply方法,看这一篇就够了,你该这么学,No.10
最近好忙啊,好忙啊,忙的写不动博客了
时间过得飞快
一晃,一周就过去了
本着不进步就倒退的性格
我成功的在技术上面划水了一周
今天要学习的还是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的更多相关文章
- 学习 Spring Boot 知识看这一篇就够了
从2016年因为工作原因开始研究 Spring Boot ,先后写了很多关于 Spring Boot 的文章,发表在技术社区.我的博客和我的公号内.粗略的统计了一下总共的文章加起来大概有六十多篇了,其 ...
- Mybatis-Plus常用的查询方法--看这一篇就够了!!!
前言: Mybatis-Plus作为Mybatis的增强,自己封装了很多简单还用的方法,来解脱自己写sql! 对于项目的搭建小编就不在说了,可以参考: SpringBoot+Mybatis-Plus的 ...
- [转帖]nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件
nginx学习,看这一篇就够了:下载.安装.使用:正向代理.反向代理.负载均衡.常用命令和配置文件 2019-10-09 15:53:47 冯insist 阅读数 7285 文章标签: nginx学习 ...
- Elasticsearch学习,请先看这一篇!
原文:Elasticsearch学习,请先看这一篇! 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn ...
- Java中的多线程=你只要看这一篇就够了
如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其 ...
- 什么是 DevOps?看这一篇就够了!
本文作者:Daniel Hu 个人主页:https://www.danielhu.cn/ 目录 一.前因 二.记忆 三.他们说-- 3.1.Atlassian 回答"什么是 DevOps?& ...
- 关于 Docker 镜像的操作,看完这篇就够啦 !(下)
紧接着上篇<关于 Docker 镜像的操作,看完这篇就够啦 !(上)>,奉上下篇 !!! 镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌 ...
- JVM内存模型你只要看这一篇就够了
JVM内存模型你只要看这一篇就够了 我是一只孤傲的鱼鹰 让我们不厌其烦的从内存模型开始说起:作为一般人需要了解到的,JVM的内存区域可以被分为:线程栈,堆,静态方法区(实际上还有更多功能的区域,并且这 ...
- 【java编程】ServiceLoader使用看这一篇就够了
转载:https://www.jianshu.com/p/7601ba434ff4 想必大家多多少少听过spi,具体的解释我就不多说了.但是它具体是怎么实现的呢?它的原理是什么呢?下面我就围绕这两个问 ...
随机推荐
- mysql 执行sql语句执行问题
SQL是一套标准,全称结构化查询语言,是用来完成和数据库之间的通信的编程语言,SQL语言是脚本语言,直接运行在数据库上.同时,SQL语句与数据在数据库上的存储方式无关,只是不同的数据库对于同一条SQL ...
- Security Study
1.WebGoat http://www.owasp.org.cn/ 学习Web应用漏洞最好的教程----WebGoat http://blog.csdn.net/bill_lee_sh_cn/art ...
- os/exec
用go来执行命令 cmd := exec.Command(命令,参数1,参数2....) out, _ := cmd.Output() data := string(out) Output得到的是正常 ...
- laravel5.4的laravel-mix踩坑记
第一个坑,cross-env目录不对 sh: node_modules/cross-env/bin/cross-env.js: No such file or directory 我查了一下cross ...
- mac 安装docker
下载地址: https://download.docker.com/mac/stable/Docker.dmg 从应用中找到 Docker 图标并点击运行.可能会询问 macOS 的登陆密码,输入即可 ...
- CF1200B
CF1200B 解法: 贪心.当在第i列时,尽可能多的取走第i列的木块使得袋子里的木块尽可能多 CODE: #include<iostream> #include<cstdio> ...
- strom部署问题
1.storm 引用的 kafka和线上的kafka版本不一致 2.bolt的prepare初始化elasticsearch连接慢,导致第一次处理数据是总是有问题storm调用prepare方法是异步 ...
- 使用sequelize-auto 生成mysql 表的实体时主键没有 autoIncrement: true 属性
使用sequelize-auto 生成mysql 表时主键没有 autoIncrement: true 属性,这会导致插入数据时报错.看git上面是已经解决了的,解决方法是修改查询语句模板.我用的是0 ...
- windows工程总结
1.win32控制台console程序 运行在MS-DOS环境中的程序.控制台应用程序通常没有可视化的界面,只是通过字符串来显示或者监控程序.控制台程序常常被应用在测试.监控等用途,用户往往只关心数据 ...
- C之指针的加法
#include<stdio.h> #include<stdlib.h> main() { //char arr [] = {'H','e','l','l','o'}; int ...