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

2024-10-01 00:26:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图确定如何创建一个列来标识行数,直到下一个值出现在另一个列中,该列本质上执行以下功能:

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

其中,事件列定义列中的事件是否发生(True)或不发生(False)。倒计时列标识在所述事件发生之前必须发生的后续行/步骤的数量。我尝试了以下方法:

y['block'] = (y['event'] != y['event'].shift(1)).astype(int).cumsum()
y['countdown'] = y.groupby('block').transform(lambda x: range(1, len(x) + 1))

但是对于操作来说,它似乎非常低效,并且不一定按照描述执行操作,将时段标识为组,而不是简单的展开

有人知道我怎样才能简明扼要地做到这一点吗,谢谢


Tags: 功能eventfalsetrue定义事件步骤block