Python 基于值0的出现对列进行编码

Python 基于值0的出现对列进行编码,python,pandas,Python,Pandas,我有一个熊猫数据框,有这样一列 df = pd.DataFrame() df['A'] = [1, 1, 0, 1, 1, 0] 我想用这样的值制作另一列 df = pd.DataFrame() df['A'] = [1, 1, 0, 1, 1, 0] [1,1,1,2,2] 想法是从值1开始,当我得到1时,仅当最后一个值为0时,才增加值。换句话说,如果我有一个0,那么在下一步中增加这个值 我使用了一个应用程序来实现这一点,如下所示 k = 1 def fn(row): glob

我有一个熊猫数据框,有这样一列

df = pd.DataFrame()
df['A'] = [1, 1, 0, 1, 1, 0]
我想用这样的值制作另一列

df = pd.DataFrame()
df['A'] = [1, 1, 0, 1, 1, 0]
[1,1,1,2,2]

想法是从值1开始,当我得到1时,仅当最后一个值为0时,才增加值。换句话说,如果我有一个0,那么在下一步中增加这个值

我使用了一个应用程序来实现这一点,如下所示

k = 1

def fn(row):

    global k
    a, b = row['A'], row['x']

    if a == 1 and b == 1:
        pass
    elif a == 1 and b == 0:
        pass
    elif a == 0 and b == 1:
        k += 1
        return (k - 1)
    else:
        k += 1
        return (k - 1)

    return k

df['x'] = df['A'].shift(-1)
df['k'] = df.apply(lambda row : fn(row), axis=1)
这是非常低效的。我想不出一个更快的方法


如何在Pandas中有效地实现这一点?

IIUC,您希望计算0的出现次数,但已移位:

df['A'].eq(0).cumsum().shift(fill_value=0)+1
或:

输出:

0    1
1    1
2    1
3    2
4    2
5    2
Name: A, dtype: int32

IIUC,您要计算0的出现次数,但已移位:

df['A'].eq(0).cumsum().shift(fill_value=0)+1
或:

输出:

0    1
1    1
2    1
3    2
4    2
5    2
Name: A, dtype: int32

不确定速度部分

s=df.index[df.A.eq(0)]
pd.Series(np.arange(len(s))+1,index=s).reindex(df.index,method='bfill')
Out[41]: 
0    1
1    1
2    1
3    2
4    2
5    2
dtype: int32

不确定速度部分

s=df.index[df.A.eq(0)]
pd.Series(np.arange(len(s))+1,index=s).reindex(df.index,method='bfill')
Out[41]: 
0    1
1    1
2    1
3    2
4    2
5    2
dtype: int32

如果输入类似于[0,0,1,1,1],我希望它是[1,2,3,3,3],如果输入类似于[0,0,1,1,1],我希望它能像预期的那样工作。谢谢你。谢谢