在for循环中递增计数器

时间:2017-08-28 14:04:16

标签: python pandas for-loop counter

我无法在for循环中正确递增计数器变量。

我有一个名为flag的变量,我想根据num中的值创建一个名为flag的新变量。

输入:

'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计数器,但没有运气......

2 个答案:

答案 0 :(得分:8)

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

使用False = 0True == 1

这一事实

如果df['num']不是True和False值的列,而是一列字符串,我建议您更改它,或将测试更改为df['num'] = (df['flag'] == 'FALSE').cumsum()

答案 1 :(得分:0)

以下是您更正后的代码,但MaartenFabré的解决方案更为出色:

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数据帧一起工作。