如何为pandas DataFrame的FailureLabel列生成符合规则的unique_id
解决方案
你原来的代码逻辑触发计数+1的条件不符合需求,可通过累加+后向填充的方式实现预期效果:
df['unique_id'] = df['FailureLabel'].cumsum().where(df['FailureLabel'] == 1).bfill().astype(int)
逻辑说明
df['FailureLabel'].cumsum()会对所有值为1的行生成递增的累计值,连续0的位置会暂留上一个1的累计值- 通过
where(df['FailureLabel'] == 1)把所有0的位置转为缺失值 - 调用
bfill()执行后向填充,所有连续0的位置会被紧随其后的第一个1的累计值填充,刚好满足「连续0和后面第一个1共享ID」的规则 - 最后用
astype(int)把浮点数格式的结果转为整数
运行上述代码得到的结果和你期望的输出完全一致。
内容的提问来源于stack exchange,提问作者Murtaza
相关产品推荐
相关产品推荐

