首页 > 解决方案 > 在新列中添加唯一标识符,直到在另一列上满足条件

问题描述

我有一个 npartition=8 的 dask 数据框,这是数据的快照:

      id1    id2     Page_nbr    record_type 
      St1    Sc1     3             START
      Sc1    St1     5              ADD      
      Sc1    St1     9             OTHER 
      Sc2    St2     34            START
      Sc2    St2     45           DURATION  
      Sc2    St2     65             END
      Sc3    Sc3     4              START  

我想在record_type之后添加一列,并根据记录类型的条件添加一个唯一的group_id,所以直到下一个record_type=START添加相同的唯一group_id,输出将如下所示:

      id1    id2     Page_nbr    record_type     group_id
      St1    Sc1     3             START             1
      Sc1    St1     5              ADD              1    
      Sc1    St1     9             OTHER             1 
      Sc2    St2     34            START             2
      Sc2    St2     45           DURATION           2
      Sc2    St2     65             END              2
      Sc3    Sc3     4              START            3 

group_id 可以是任何唯一编号。由于数据框很大,遍历行可能不是最佳选择。想知道是否有任何pythonic方法可以做到这一点?

标签: pythondataframedask

解决方案


取“record_type”列,与“START”比较,然后计算cumsum

ddf['group_id'] = ddf['record_type'].eq('START').cumsum()
ddf.compute()

   id1  id2  Page_nbr record_type  group_id
0  St1  Sc1         3       START         1
1  Sc1  St1         5         ADD         1
2  Sc1  St1         9       OTHER         1
3  Sc2  St2        34       START         2
4  Sc2  St2        45    DURATION         2
5  Sc2  St2        65         END         2
6  Sc3  Sc3         4       START         3

推荐阅读