Значение Dask Replica Pandas учитывается в Groupby

Что я пытаюсь сделать, так это воспроизвести счетчики значений panda + функции idxmax в dask, потому что у меня много данных. Вот пример кадра данных:

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

В пандах это можно сделать так:

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

Однако, когда вы делаете то же самое в Dask, это не удается, выдавая ошибку атрибута.

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. Любые альтернативные решения приемлемы, я просто хочу выполнить свою работу!


person Nate Raw    schedule 01.08.2017    source источник


Ответы (1)


value_counts не поддерживается напрямую в dask API для фреймов данных. Используйте apply для достижения желаемого результата.

Обратите внимание, что метод value_counts поддерживается как метод Series.

>>> 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
person Alexander    schedule 01.08.2017
comment
Вау спасибо!! Я знал, что что-то не поддерживается, я просто не знал, где я ошибаюсь. +1 и принятое редактирование: не могу +1 из-за репутации, ха-ха - person Nate Raw; 01.08.2017
comment
Dask был обновлен и напрямую поддерживает value_counts! - person skibee; 03.04.2018