2017-04-07 70 views
2

我有一個groupby,在不使用元參數的情況下爲我工作。它輸出我想要的,但我想添加列名稱,並獲得一個數據幀,而不是一個系列作爲輸出。Dask Groupby-應用元失敗

我這個試圖運行下面的代碼:

jmin = client.persist(j1.loc[:10000]) 

import pandas as pd 
import numpy as np 

def unique(d): 
    return len(d.loc[:,['id']].drop_duplicates()) 

meta=pd.DataFrame(columns=['ids_per_mac']) 
meta.ids_per_mac.astype(np.int64) 

uu = client.persist(jmin.groupby(jmin['mac_address']).apply(unique,meta=meta)) 

執行失敗:

enter image description here

任何想法,爲什麼這GROUPBY適用不工作VS版本,而不元?

uu = client.persist(jmin.groupby(jmin['mac_address']).apply(unique)) 

回答

4

添加meta=告訴dask.dataframe它應該期望從你的函數中得到什麼。這是對dask.dataframe進行禮貌的一種方式,以便它可以繼續懶惰地操作,而無需調用代碼來確定函數返回的內容。

不幸的是,它不是自動轉換您的數據的方式。你仍然必須依靠普通的熊貓API來做到這一點。

您可能會考慮使用.to_frame()方法將Series轉換爲DataFrame。

您可能也知道,但調用groupby.apply要比使用像groupby.nuniquegroupby.aggregate這樣的內置縮減慢得多。