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


對於以下dataframe執行dataframe.groupby(['name', 'course']).apply(lambda x: test(x)) 操作

其中test(x)函數為:

def test(x):
    print(x)

那么打印結果為:

可以發現,groupby()后的第一個結果被打印了兩次。

對於這種情況,Pandas官方文檔的解釋是:

什么意思呢?就是說,apply在第一列/行上調用func兩次,以決定是否可以進行某些優化。

而在pandas==0.18.1以及最新的pandas==0.23.4中進行嘗試后發現,這個情況都存在。

在某些情境,例如對groupby()后的dataframe進行apply()批處理,為了避免重復,我們並不想讓第一個結果打印出兩次。

方法一:

如果能對apply()后第一次出現的dataframe跳過不處理就好了。

這里采用的方法是設置標識符,通過判斷標識符狀態決定是否跳過。代碼如下:

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~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM