2017-04-07 5 views
2

私はmeta引数を使用せずに私のために働いているgroupbyを持っています。私が望むものを出力しますが、列名を追加してシリーズとしてではなくデータフレームを出力として使用したいと考えています。Dask Groupby-Applyメタが失敗しました

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が適用されたメタなしバージョン対動作していない理由を任意のアイデア

私は、これは次のコードを実行しようとしていますか?

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

答えて

4

meta=を追加すると、dask.dataframeはあなたの機能から期待するべきことを伝えます。これはdask.dataframeを丁寧にして、あなたの関数が返すものを判断するためにコードを呼び出すことなく、遅延して動作し続けることができる方法です。

残念ながら、データを自動的に変換する方法ではありません。このためには、通常のPandas APIに依然として依存する必要があります。

.to_frame()メソッドを使用してSeriesをDataFrameに変換すると考えられます。

あなたはおそらく認識しているかもしれませんが、groupby.applyの呼び出しは、groupby.nuniqueまたはgroupby.aggregateのような組み込み縮小を使用するよりもはるかに低速です。

関連する問題