最近好忙啊,好忙啊,忙的写不动博客了
时间过得飞快
一晃,一周就过去了
本着不进步就倒退的性格
我成功的在技术上面划水了一周
今天要学习的还是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你学会了吗?
没学会,就在看一遍
书读百遍,该不会,还是不会
拿出手机,对着我的公主号,拍一拍