for循环中的递增计数器

Incrementing counter within for loop

我在 for 循环中正确递增计数器变量时遇到问题。

我有一个名为 flag 的变量,我想根据 flag.

中的值创建一个名为 num 的新变量

输入:

'flag'
FALSE
TRUE
TRUE
TRUE
FALSE
TRUE
FALSE
TRUE
TRUE

期望的输出:

'flag' 'num'
FALSE   1
TRUE    1
TRUE    1
TRUE    1
FALSE   2
TRUE    2
FALSE   3
TRUE    3
TRUE    3

目标是将 num 计数器从 1 开始并保持该计数器为 1,直到另一个 False 实例出现在 flag 列中。这将一直持续到 df 结束。

我的代码:

def num(z):  
    i = 0
    for x in range (0,len(z)):
        if z['flg'] == False:
            return i + 1
        else:
            return i

df['num']=df.apply(num, axis=1)

我试过在很多地方增加 I 计数器,但没有成功...

df['num'] = (~df['flag']).cumsum()

使用 False = 0True == 1

如果df['num']不是一列True和False值,而是一列字符串,我建议你改一下,或者把test改成df['num'] = (df['flag'] == 'FALSE').cumsum()

这是您在更正问题中的代码,但 Maarten Fabré 的解决方案更好:

def num(z):
    i = 0
    numcol = []
    for flag in z:
        if not flag:
            i += 1
        numcol.append(i)
    return numcol

df['num'] = num(df['flag'])

起初我想用一个生成器来做,但我没有让它与 pandas 数据框一起工作。