基于start、end双条件用指定步长序列填充pandas列的实现方案
实现代码
你可以通过分组累计计数的方式完成需求,性能远高于逐行apply的lambda实现,和你预期输出完全匹配:
import pandas as pd import numpy as np # 示例数据构造 df = pd.DataFrame({ 'start': [1,0,0,0,0,0,0,0,1,0], 'end': [0,0,0,0,0,1,0,0,0,0] }) # 核心逻辑 # 1. 给每个计数段分配唯一组ID df['group_id'] = df['start'].cumsum() # 2. 标记当前行是否在对应组的end行之后 df['after_end'] = df.groupby('group_id')['end'].cummax().shift(fill_value=0) # 3. 计算time列值 df['time'] = np.where( df['after_end'].eq(0), -5000 + df.groupby('group_id').cumcount() * 4, np.nan ) # 删除临时列得到最终结果 df = df.drop(columns=['group_id', 'after_end']) print(df)
运行后输出和你提供的预期结果完全一致,同时支持多段start-end交替的场景。
内容的提问来源于stack exchange,提问作者KateP
相关产品推荐
相关产品推荐

