時間過得飛快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)
複製代碼
要想成爲高手,這時候,你要開始寫代碼了
千萬不能只看着
對的,你看着永遠學不會的
相信橡皮擦
而後咱們對結果應用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方法 會將分組後的數據一塊兒傳入 能夠返回多維數據厲害,厲害,雖然通常我只用最簡單的
代碼呢,你能夠改爲這個樣子
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你學會了嗎?
沒學會,就在看一遍
書讀百遍,該不會,仍是不會
拿出手機,對着個人公主號,拍一拍