0

我有一个数据表 -

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[14]: 
   |  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]

我现在要选择一个在 C 列中有 api 的观察值 -

DT[f.C=="api",:]
Out[12]: 
   |  A  B   C  
-- + --  --  ---
 0 |  4  D   api

好的,现在我想找到一个与这个观察相关的索引,这样我就可以在数据表中从这个索引开始选择观察,

例如,上面的观察在 DT 中有第 4 行,我可以选择从第 4 开始的观察作为 -

DT[4:,:]
Out[15]: 
   |  A  B   C       
-- + --  --  --------
 0 |  4  D   api     
 1 |  2  B   skumar  
 2 |  1  A   myamulla

但是,如果在 DT 中有数百万个观察值,我无法计算出所需的观察指数。

4

1 回答 1

1

一种解决方法是创建一个临时索引列:

from datatable import dt, f, update
DT[:, update(index = range(DT.nrows))]

In [8]: DT
Out[8]: 
   |     A  B      C         index
   | int32  str32  str32     int32
-- + -----  -----  --------  -----
 0 |     1  A      myamulla      0
 1 |     3  B      skumar        1
 2 |     2  C      cary          2
 3 |     1  A      myamulla      3
 4 |     4  D      api           4
 5 |     2  B      skumar        5
 6 |     1  A      myamulla      6
[7 rows x 4 columns]

现在创建一个过滤器i以向下选择索引:

In [11]: DT[DT[f.C=='api', 'index'][0,0]:, :-1]
Out[11]: 
   |     A  B      C       
   | int32  str32  str32   
-- + -----  -----  --------
 0 |     4  D      api     
 1 |     2  B      skumar  
 2 |     1  A      myamulla
[3 rows x 3 columns]
于 2021-02-11T09:14:18.047 回答