首页 > 解决方案 > 如何在数据表框架中按组查找唯一值

问题描述

我创建了一个数据表框架,如下所示,

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)]

除此之外,我还有五个客户 ID,这些计数为

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

现在我想看看每个客户生命周期中存在多少个唯一客户 ID,

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

它应该显示为潜在客户有 3 个唯一的客户 ID,例如 (1,2,5),活动用户有 2 个唯一的客户 ID (2,4),依此类推。

我无法按预期得到它,你能告诉我如何修复它吗?

仅供参考:我试图在 R data.table 框架上重现相同的内容,它的工作原理。

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

标签: pythonpy-datatable

解决方案


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]

推荐阅读