首页 > 解决方案 > 根据值 0 的出现对 Pandas 中的列进行编码

问题描述

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

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

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

[1, 1, 1, 2, 2, 2]

这个想法是从 value 开始,1当我得到 a1并且只有当最后一个 value 是 时才增加 value 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 中实现这一点。?

标签: pythonpandas

解决方案


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

推荐阅读