时间过得飞快python
一晃,一周就过去了app
本着不进步就倒退的性格 我成功的在技术上面划水了一周 函数
说是高级,其实就是比初级复杂了一些学习
有点绕,而后不容易明白测试
就成为高级了spa
其实对于pandas来讲code
应该仍是基础部分orm
咱们今天要学习的就是cdn
自定义更丰富的分组运算blog
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)
复制代码
要想成为高手,这时候,你要开始写代码了
千万不能只看着
对的,你看着永远学不会的
相信橡皮擦
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))
复制代码
你看看出来的数据
厉害,厉害,虽然通常我只用最简单的
代码呢,你能够改为这个样子
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最经常使用
也是最好用的方法
固然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你学会了吗?
没学会,就在看一遍
书读百遍,该不会,仍是不会
拿出手机,对着个人公主号,拍一拍