我正在尝试确定如何创建一列来标识行数,直到下一次在另一列中出现带有熊猫的值时,该熊猫实际上执行以下功能:
rowid event countdown
1 False NaT
2 True 0 # resets countdown
3 False 1
4 False 2
5 True 0 # resets countdown
6 False 1
其中“事件”列定义该列中的事件是否发生(真)或(假)。并且倒数列标识在所述事件发生之前必须发生的后续行/步骤的数量。我尝试了以下方法:
y['block'] = (y['event'] != y['event'].shift(1)).astype(int).cumsum()
y['countdown'] = y.groupby('block').transform(lambda x: range(1, len(x) + 1))
,但对于该操作而言似乎效率很低,并且不一定执行上述操作,而是将时间段标识为组而不是简单地进行展示。
有人知道我能简洁地做到这一点吗,谢谢!
答案 0 :(得分:1)
我将做什么cumcount
df.groupby(df.event.cumsum()).cumcount()
Out[46]:
0 0
1 0
2 1
3 2
4 0
5 1
dtype: int64