學習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你學會了嗎?

沒學會,就在看一遍

書讀百遍,該不會,還是不會

在這裏插入圖片描述

拿出手機,對着我的公主號,拍一拍

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章