3

我想按组识别 py-dtatable 中的重复行(并创建一个带有布尔值的辅助列 C)。

它应该按照以下方式工作:

DT = dt.Frame(A=[1, 2, 1, 2, 2, 1], B=list("XXYYYY"))

我得到 -> TypeError: Expected a Frame,而不是当我对其应用分组以找出组的独特观察时得到类'datatable.expr.expr.Expr'。

但是, unique() 不起作用,关于 py-datatable 可用函数的文档非常稀疏:https ://datatable.readthedocs.io/en/v0.10.1/using-datatable.html#perform-groupby -计算

我不确定 py-datatable 是否落后于 R datatable 并且它不可能,因为它似乎是一个基本操作,但我找不到解决方案。有人有它或可以向我指出资源的方向吗?理想情况下,这将包括在一行代码中的新列 C 中分配布尔(是否重复)的语法。

4

1 回答 1

3

就我的理解而言,

他想创建一个列来指示特定观察是否重复。

这是我的解决方案:

import datatable as dt
from datatable import by,f,count

样本数据表 -

DT_EX = dt.Frame(A=list("XXYYYYXX"),B=[1, 2, 1, 2, 2, 1,3,3])

Out[3]: 
   | A    B
-- + --  --
 0 | X    1
 1 | X    2
 2 | Y    1
 3 | Y    2
 4 | Y    2
 5 | Y    1
 6 | X    3
 7 | X    3

[8 rows x 2 columns]

并执行此代码块-

DT[:,count(),by(f.A,f.B)][:,f[:].extend({'duplicated': f.count>1 })]

它的工作原理就像首先对列 A、B 应用分组,计算每组的观察值。接下来,它使用一个名为 duplicated 的新列扩展数据表,在此,如果 count 的值超过 1,则应将其填充为重复的 'True' 否则为 'False'

输出是-

Out[5]: 
   | A    B  count  duplicated
-- + --  --  -----  ----------
 0 | X    1      1           0
 1 | X    2      1           0
 2 | X    3      2           1
 3 | Y    1      2           1
 4 | Y    2      2           1

[5 rows x 4 columns]

于 2020-06-16T03:15:47.240 回答