有条件替换基于熊猫数据框python同一列中的先前值


问题内容

感觉到我到处都是,我知道它可能很简单。我正在使用pandas数据框,并希望根据该SAME列中的数据填充/替换其中一列中的数据。我通常更多地是excel用户,并且在excel中非常简单。如果我们有:

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

在excel中,我想做的是“ = IF(AND(A2 = 0,B1 = -1),-1,A2),这样我就可以向下拖动列’B’,这将适用。
,基于B列的先前数据点和A列的当前值,我需要更新B的当前值。

我试过了:

df['B'] = np.where((df['A'] == 0), (df['B'].shift(1) == -1),
                   df['B'].replace(to_value = 0, method = 'ffill'), df['A'])

以及其他许多版本,以及变体和其他难以置信的极端变通方法。

任何建议,不胜感激。

编辑:

结果将是:

df['B'] = [0, -1, -1, -1, -1 , -1, -1, 1, 0]

问题答案:

这是一种蛮力方法。可能有些更优雅的方法,但是您可以像这样显式地遍历行:

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

# loop here
for i in range(1,len(df)):
     if df.A[i] == 0 and df.B[i-1] == -1:
             df.B[i] = -1
     else:
             df.B[i] = df.A[i]

这为您提供了您想要的结果:

>>> df['B']
0    0
1   -1
2   -1
3   -1
4   -1
5   -1
6   -1
7    1
8    0