Как найти уникальные значения для поля в Pydatatable Data Frame - PullRequest
0 голосов
/ 03 мая 2020

Я создал рамку с данными следующим образом:

DT_EX = dt.Frame({'cid':[1,2,1,2,3,2,4,2,4,5],
              'cust_life_cycle':['Lead','Active','Lead','Active','Inactive','Lead','Active','Lead','Inactive','Lead']})

Здесь у меня есть три уникальных жизненных цикла клиента, и каждый из этих подсчетов находится как

DT_EX[:,count(),by(f.cust_life_cycle)]

Наряду с этим, У меня есть пять идентификаторов клиентов, и это число равно

DT_EX[:,count(),by(f.cid)]

Теперь я хотел бы увидеть, сколько уникальных идентификаторов клиентов существует в каждом жизненном цикле клиента:

DT_EX[:,{'unique_cids':dt.unique(f.cid)},by(f.cust_life_cycle)]

Это должно показывать как ведущий клиент получил 3 уникальных идентификатора клиента, таких как (1,2,5), активный пользователь получил 2 уникальных идентификатора клиента (2,4) и т. д.

Я не мог получить его как ожидается, не могли бы вы дать мне знать, как это исправить?.

К вашему сведению: я пытался воспроизвести то же самое на фрейме с данными R, он работает.

DT_EX[,uniqueN(cid),by=cust_life_cycle]

1 Ответ

1 голос
/ 05 мая 2020

Функция dt.unique не применяется по группам (пока). Таким образом, один из способов добиться того, что вам нужно, - это сначала сгруппировать по жизненному циклу + customerID, а затем на втором шаге перегруппировать только по жизненному циклу:

>>> DT_EX[:, count(), by(f.cust_life_cycle, f.cid)]\
...      [:, {"unique_cids": count()}, by(f.cust_life_cycle)]

   | cust_life_cycle  unique_cids
-- + ---------------  -----------
 0 | Active                     2
 1 | Inactive                   2
 2 | Lead                       3

[3 rows x 2 columns]
...