pandas:解決groupby().apply()方法打印兩次

對於如下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~

相關文章
相關標籤/搜索