如何创建一列来标识行数,直到下一次在另一个列中出现pandas值为止?

时间:2019-11-26 03:08:22

标签: python pandas

我正在尝试确定如何创建一列来标识行数,直到下一次在另一列中出现带有熊猫的值时,该熊猫实际上执行以下功能:

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))

,但对于该操作而言似乎效率很低,并且不一定执行上述操作,而是将时间段标识为组而不是简单地进行展示。

有人知道我能简洁地做到这一点吗,谢谢!

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