python - 如何使用 pandas 创建一个列来标识直到另一列中下一次出现某个值为止的行数?

标签 python pandas

我正在尝试确定如何创建一个列来标识行数,直到另一列中下一次出现某个值为止,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/

相关文章:

python - 使用 Makefile、Docker 和 Python 部署到 heroku

python - 使用 Pandas 读取带有时间戳列的 csv

python - 如何拆分整个pandas DataFrame以列出并选择第n个元素

python - 使用 pandas 从 json 文件中提取数据时, bool 值会自动转换为大写

python - Pandas 用不同大小的 block 替换行 block

python - 多对多关系的 Django 方向

python - ORA-03135 连接在尝试使用 python 和 cx_Oracle 模块连接到数据库时失去联系

python - 如何在 django 测试设置中创建 postgresql 扩展

python - 什么时候使用 df.value_counts() 与 df.groupby ('...' ).count() 比较合适?

python - 是否可以将参数解包运算符(又名飞溅运算符)实现为函数?