0

我有一个pydatatable,

DT = dt.Frame(
     A=[1, 3, 2, 1, 4, 2, 1], 
     B=['A','B','C','A','D','B','A'],
     C=['myamulla','skumar','cary','myamulla','api','skumar','myamulla'])
Out[7]: 
   |  A  B   C       
-- + --  --  --------
 0 |  1  A   myamulla
 1 |  3  B   skumar  
 2 |  2  C   cary    
 3 |  1  A   myamulla
 4 |  4  D   api     
 5 |  2  B   skumar  
 6 |  1  A   myamulla

[7 rows x 3 columns]

我正在尝试过滤掉重复的行

DT[:, first(f[1:]), by([f[0],f[1],f[2]])]

它的输出为-

Out[10]: 
   |  A  B   C         B.0  C.0     
-- + --  --  --------  ---  --------
 0 |  1  A   myamulla  A    myamulla
 1 |  2  B   skumar    B    skumar  
 2 |  2  C   cary      C    cary    
 3 |  3  B   skumar    B    skumar  
 4 |  4  D   api       D    api     

[5 rows x 5 columns]

在这里,它删除了重复的观察结果,为什么它在B 和 C 上创建重复的列 B.0 C.0

4

1 回答 1

0

by() 函数将其参数列添加到输出帧中,以便可以清楚地看到组列和相应的j计算结果。在您的示例中,您按 3 列和分组f[0],然后在每个组中计算和。所以这正是输出显示的内容:首先是 3 个“by”列,然后是 2 个“first()”列。此外,由于后两列通常会自动命名为“B”和“C”,但输出中已经存在“A”、“B”、“C”列,因此最后两列被重命名为“B.0”和“C.0”。f[1]f[2]first(f[1])first(f[2])

现在,如果您不想将列“A”、“B”、“C”自动添加到输出中,可以使用 by() 的参数add_columns=False

>>> DT[:, first(f[1:]), by([f[0],f[1],f[2]], add_columns=False)]
   | B      C       
   | str32  str32   
-- + -----  --------
 0 | A      myamulla
 1 | B      skumar  
 2 | C      cary    
 3 | B      skumar  
 4 | D      api     
[5 rows x 2 columns]
于 2021-02-11T20:10:45.327 回答