2017-08-01 20 views
1

私がやっていることは、たくさんのデータがあるので、pandaの値のカウント+ idxmaxの関数をdaskに複製することです。ここでは例のデータフレームは、次のとおりです。Dask replicate GroupbyのPandas値のカウント

パンダで
partner_num cust_id item_id revw_ratg_num revw_dt item_qty 
0 100 01 5 05/30/2000 0 
0 100 03 5 05/30/2000 0 
0 100 02 5 05/30/2000 0 
1 200 13 4 04/01/2000 0 
1 200 14 5 04/01/2000 1 
2 200 22 2 04/01/2000 1 
3 200 37 3 04/01/2000 1 
9 300 92 1 03/24/2000 1 
9 300 93 1 03/24/2000 1 
9 300 94 1 03/24/2000 0 
9 300 99 1 03/24/2000 0 
6 300 91 2 03/24/2000 0 

>>>df.head() 
    partner_num cust_id item_id revw_ratg_num  revw_dt item_qty 
0   0  100  1    5 05/30/2000   0 
1   0  100  3    5 05/30/2000   0 
2   0  100  2    5 05/30/2000   0 
3   1  200  13    4 04/01/2000   0 
4   1  200  14    5 04/01/2000   1 

あなたはこのようにそれを行うことができます:あなたはDASKで同じことを行うために行くとき

df = pd.read_csv("fake_data.txt", sep="\t") 
df.groupby(["cust_id"]).item_qty.value_counts() 

cust_id item_qty 
100  0   3 
200  1   3 
     0   1 
300  0   3 
     1   2 

しかし、それは属性のエラーを投げて、失敗した

df1 = dd.read_csv("fake_data.txt", sep="\t") 
df1.groupby(["cust_id"]).item_qty.value_counts() 

Traceback (most recent call last): 
    File "<pyshell#14>", line 1, in <module> 
    df1.groupby(["cust_id"]).item_qty.value_counts() 
AttributeError: 'SeriesGroupBy' object has no attribute 'value_counts'' 

私が実際にできることを望むのは、Daskの複数列のグループの後に、両方の値とその発生カウントを取得できることです。代わりの解決策は受け入れられる、私はちょうど仕事を完了したい!

答えて

3

value_countsは、直接データフレームのためにdask APIでサポートされていません。希望の結果を得るには、applyを使用してください。 value_countsはシリーズ方式としてサポートされていることを

は注意してください。

>>> df1.groupby(['cust_id']).item_qty.apply(lambda x: x.value_counts()).compute() 
cust_id 
100  0 3 
200  1 3 
     0 1 
300  0 3 
     1 2 
Name: item_qty, dtype: int64 
+0

うわーはあなたに感謝します!私はサポートされていない何かを知っていた、私はちょうど私が間違っていた知っていた。 +1して受け入れられた編集:代理人のために+1することはできません –