我正在尝试确定如何创建一个列来标识行数,直到另一列中下一次出现某个值为止,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
其中事件列定义列中的事件是否发生(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))
但该操作的效率似乎非常低,并且不一定执行所描述的操作,将周期识别为组而不是简单的推出。
有谁知道我如何才能简洁地完成这个任务,谢谢!
最佳答案
我会做什么cumcount
df.groupby(df.event.cumsum()).cumcount()
Out[46]:
0 0
1 0
2 1
3 2
4 0
5 1
dtype: int64
关于python - 如何使用 pandas 创建一个列来标识直到另一列中下一次出现某个值为止的行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59043153/