我试图将一个连续的数字列表作为一个基于过滤器的列分配给一个称为 work
; 其目的是生成一个唯一的id,该id与gig的每个开始绑定。下面是一套带有 gig_status column
显示车辆中工人的gig启动时间:
worker veh gig_status starttime stoptime
0 11133y QQUK1 start 2018-12-21 15:17:29 2018-12-21 15:18:57
1 44706h FF243 start 2019-01-01 00:10:16 2019-01-01 00:16:32
2 44706h FF243 2019-01-01 00:27:11 2019-01-01 00:31:38
3 44706h FF243 2019-01-01 00:46:20 2019-01-01 01:04:54
4 44761y LL525 start 2019-01-01 00:19:06 2019-01-01 00:39:43
5 44842q OO454 start 2019-01-01 00:12:35 2019-01-01 00:19:09
6 44842q OO454 2019-01-01 00:47:55 2019-01-01 01:00:01
7 44842q OO454 2019-01-01 01:12:47 2019-01-01 02:01:50
8 46090u OP324 start 2019-01-01 00:16:23 2019-01-01 00:39:46
9 46090u OP324 2019-01-01 00:58:02 2019-01-01 01:19:02
以下是我预期的初始输出:
worker veh gig_status starttime stoptime. gig_id
0 11133y QQUK1 start 2018-12-21 15:17:29 2018-12-21 15:18:57 1
1 44706h FF243 start 2019-01-01 00:10:16 2019-01-01 00:16:32 2
2 44706h FF243 2019-01-01 00:27:11 2019-01-01 00:31:38
3 44706h FF243 2019-01-01 00:46:20 2019-01-01 01:04:54
4 44761y LL525 start 2019-01-01 00:19:06 2019-01-01 00:39:43 3
5 44842q OO454 start 2019-01-01 00:12:35 2019-01-01 00:19:09 4
6 44842q OO454 2019-01-01 00:47:55 2019-01-01 01:00:01
7 44842q OO454 2019-01-01 01:12:47 2019-01-01 02:01:50
8 46090u OP324 start 2019-01-01 00:16:23 2019-01-01 00:39:46 5
9 46090u OP324 2019-01-01 00:58:02 2019-01-01 01:19:02
然后,我们的想法是使用一个前向填充将每条记录绑定到它的新id。
在里面 R
使用 data.table()
这很简单,写出来如下:
work[gig_status=="start", gig_id:=seq.Int(.N)]
基本上,为符合gig_状态中“开始”值的每个记录分配一个序列。
如何在python中实现此输出?我尝试过使用range,但效果似乎不一样:
# produce the length of the subset dataframe
x = len(work.loc[work.gig_status == 'start'])
# produce a listed range from 0 to that length and assign as a new column
work['gig_id'] = work.loc[work.gig_status == 'start'] = list(range(0,x)
我得到的gig_id不在0和过滤数据集的长度之间。
1条答案
按热度按时间azpvetkf1#
尝试通过
cumsum()
及mask()
:或
通过
loc
存取器和cumsum()
:或