根据值0的出现在Pandas中编码一列

时间:2019-07-08 16:14:36

标签: python pandas

我有一个带有这样一列的Pandas数据框,

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

我想用这样的值制作另一列

[1, 1, 1, 2, 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)

这实际上是效率低下的。我想不出一个更快的方法。

如何在熊猫中有效地实现这一目标??

2 个答案:

答案 0 :(得分:3)

IIUC,您想计算0的出现但已转移:

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

或者:

df['A'].shift().eq(0).cumsum()+1

输出:

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

答案 1 :(得分:2)

不确定速度部分

Private Sub C2_Click()
    Sheets("Prueba").Range("A1").value= Evaluate("=SUM(Prueba:Reporte!A1:C5)")
End Sub