對於如下dataframe執行dataframe.groupby(['name', 'course']).apply(lambda x: test(x)) 操做app
其中test(x)函數爲:函數
def test(x): print(x)
那麼打印結果爲:
測試
能夠發現,groupby()後的第一個結果被打印了兩次。優化
對於這種狀況,Pandas官方文檔的解釋是:spa
什麼意思呢?就是說,apply在第一列/行上調用func兩次,以決定是否能夠進行某些優化。3d
而在pandas==0.18.1以及最新的pandas==0.23.4中進行嘗試後發現,這個狀況都存在。code
在某些情境,例如對groupby()後的dataframe進行apply()批處理,爲了不重複,咱們並不想讓第一個結果打印出兩次。blog
方法一:文檔
若是能對apply()後第一次出現的dataframe跳過不處理就行了。pandas
這裏採用的方法是設置標識符,經過判斷標識符狀態決定是否跳過。代碼以下:
global flag flag = False def test(x): global flag if flag == False: flag = True return print(x)
測試結果爲:
能夠發現重複的dataframe已經跳過再也不打印,問題順利地解決~
方法二:
在上面的分析中,已經找了問題的緣由是由於apply()方法的引入。那麼,有沒有能夠代替apply()方法呢?這裏能夠採用filter()方法,即用groupby().filter() 代替groupby().apply()。具體代碼以下:
def test(x): print(x) df.groupby(['name', 'course']).filter(lambda x: test(x))
打印出測試結果,也ok~