最近好忙啊,好忙啊,忙的寫不動博客了
時間過得飛快
一晃,一周就過去了
本着不進步就倒退的性格
我成功的在技術上面划水了一周
今天要學習的還是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你學會了嗎?
沒學會,就在看一遍
書讀百遍,該不會,還是不會
拿出手機,對着我的公主號,拍一拍