Pandas如何为连续True分组分配标签,False值统一标记为0?
Pandas实现连续True值簇标签分配的方法
完整实现代码
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'Value': [True, True, False, False, False, True, True, False, True, True] }) # 核心逻辑 # 识别连续True簇的起始位置并累加计数 df['Label'] = (df['Value'] & df['Value'].ne(df['Value'].shift())).cumsum() # 所有False对应的标签统一置为0 df.loc[~df['Value'], 'Label'] = 0
输出结果验证
运行上述代码后得到的df和需求完全匹配:
Value Label 0 True 1 1 True 1 2 False 0 3 False 0 4 False 0 5 True 2 6 True 2 7 False 0 8 True 3 9 True 3
逻辑说明
df['Value'].shift()将Value列整体下移一行,用于和当前行值做对比df['Value'].ne(df['Value'].shift())返回布尔序列,当前行和上一行Value不同时为True,定位值变化的位置- 和
df['Value']做与运算后,仅保留连续True簇的起始位置为True,其余位置为False - 对上述布尔序列做累加(cumsum),每遇到一个新的True簇起始位置计数加1,同一簇的计数保持一致
- 最后将所有Value为False的行的Label统一赋值为0即可
内容的提问来源于stack exchange,提问作者Zizzipupp
相关产品推荐
相关产品推荐

