我有一个熊猫数据框,其中每一行都是一个子序列。我要执行以下操作;
下面的代码创建原始数据
data = {'date':['1/1/18', '1/2/18', '1/3/18', '1/1/18', '1/2/18', '2/2/18', 2/3/18', '2/4/18', '2/4/18', '2/4/18', '2/5/18'],
'SN': ['111', '111', '111', '222', '222','222', '333', '333', '333', '444', '444'],
'feat1': [1,2,3,4,5,6,7,8,9,10,11],
'event':[0,0,1,0,1,0,0,1,0,0,1]}
orig_data = pd.DataFrame(data)
所需的输出如下:
答案 0 :(得分:2)
IIUC,您可以尝试一下;
编辑
orig_data['steps_'] = orig_data.groupby(['SN',(1 == orig_data['event'].shift(1)).cumsum()]).cumcount()
print(orig_data)
SN date event feat1 steps_
0 111 1/1/18 0 1 0
1 111 1/2/18 0 2 1
2 111 1/3/18 1 3 2
3 222 1/1/18 0 4 0
4 222 1/2/18 1 5 1
5 222 2/2/18 0 6 0
6 333 2/3/18 0 7 0
7 333 2/4/18 1 8 1
8 333 2/4/18 0 9 0
9 444 2/4/18 0 10 0
10 444 2/5/18 1 11 1
注意;我省略了'date'上的groupby,因为按'date'排序会给'333'带来麻烦。 '2/4/18'给出两次,那么哪个先出现?