前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >学习pandas apply方法,看这一篇就够了,你该这么学,No.10

学习pandas apply方法,看这一篇就够了,你该这么学,No.10

作者头像
梦想橡皮擦
发布2019-06-21 14:52:42
7960
发布2019-06-21 14:52:42
举报

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

时间过得飞快

一晃,一周就过去了

本着不进步就倒退的性格 我成功的在技术上面划水了一周

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

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

有点绕,然后不容易明白

就成为高级了

其实对于pandas来说

应该还是基础部分

我们今天要学习的就是

自定义更丰富的分组运算

apply 方法

在这里插入图片描述
在这里插入图片描述

apply方法的价值

对于有些数据类型来说 是的,有些

agg与transform 不是很适合 所以就会出现apply方法

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

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

要测试,先造数据

代码语言:javascript
复制
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]})

数据造好,分组开始

代码语言:javascript
复制
grouped = df.groupby('A')

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

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

千万不能只看着

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

相信橡皮擦

数据就长成这个样子
数据就长成这个样子
在这里插入图片描述
在这里插入图片描述

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

代码语言:javascript
复制
d = grouped.apply(lambda x:x.describe())
print(d)

lambda表达式,自己去百度下,关键字python lambda 就是个匿名函数,没啥难的

在这里插入图片描述
在这里插入图片描述

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

当当当,结果展示为

在这里插入图片描述
在这里插入图片描述

对于apply()方法来说,它做了这么一个操作 将groupby分组好的数据,一组,一组,一组的传递到了函数里面

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

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

很难理解,是吧

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

在这里插入图片描述
在这里插入图片描述

给你弄个图,理解理解

在这里插入图片描述
在这里插入图片描述

什么,还不理解

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

新需求哦~

完整代码

代码语言:javascript
复制
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,咱们在实现一下,可能更清楚一些

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

代码语言:javascript
复制
def get_top(df):
    return df.head(2)

d = grouped.apply(get_top)

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

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

代码语言:javascript
复制
def get_top(df,n):
    return df.head(n)

d = grouped.apply(get_top,n=3)

print(d)

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

自己去试试吧

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

也是最好用的方法

当然pandas这么厉害

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

填补空值

代码语言:javascript
复制
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你学会了吗?

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 最近好忙啊,好忙啊,忙的写不动博客了
  • 今天要学习的还是groupby的高级进阶
  • apply方法的价值
  • 不用lambda,咱们在实现一下,可能更清楚一些
  • apply方法也可以应用在series上面
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档