Python 基于前几行的数据帧if-else条件无效

Python 基于前几行的数据帧if-else条件无效,python,pandas,Python,Pandas,有没有办法使下面的代码更有效 for i in range(0, len(df)): current_row = df.iloc[i] if i > 0: previous_row =df.iloc[i-1] else: previous_row = current_row if (current_row['A'] != 1): if ((current_row['C'] < 55) and (

有没有办法使下面的代码更有效

for i in range(0, len(df)):
    current_row = df.iloc[i]    
    if i > 0:
        previous_row =df.iloc[i-1]
    else:
        previous_row = current_row 
    if (current_row['A'] != 1):
        if ((current_row['C'] < 55) and (current_row['D'] >= -1)):
            df.loc[i,'F'] = previous_row['F'] + 1
        else: 
            df.loc[i,'F'] = previous_row['F']
我的输出应该是这样的

>>> df
   A  C  D  F
0  1  1  1  1
1  1  1  1  1
2  1  1  1  1
3  0  0  0  2
4  0  0  0  3
5  0  0  0  4
6  1  1  1  1
7  0  1  1  2
8  0  1  1  3
因此,基本上,如果满足条件,我希望将“F”的值修改为“F”+1的前一行

我也尝试了下面的代码,但它力的工作

df['prev'] = df.F.shift()
def shift(row):
    row['F'] = np.where((row['A'] != 1) & ((row['C']<55) & (row['D']>=-1)), row['prev'] + 1, row['prev'])
    return row['F']

df['F'] = df.apply(shift, axis=1)
df['prev']=df.F.shift()
def班次(世界其他地区):
行['F']=np。其中((行['A']!=1)和((行['C']=-1)),行['prev']+1,行['prev'])
返回行['F']
df['F']=df.apply(移位,轴=1)

使用
df.F.shift(1)
创建一个新列
F_previous
,这样您将获得1移位值作为新列。现在编写一个函数,使用该列和其他列返回新的
F
值,并使用
apply
方法获取
F
列的新值

欢迎来到DS SE!一般来说,像这样的特定编程问题更适合Stackoverflow。有关问题,请参阅DS on主题部分:这里的问题是当前行的计算取决于前一行的计算。所以它需要在一个循环中完成,请看:正如您所说,我尝试了代码(在问题中进行了更新),但没有成功
df['prev'] = df.F.shift()
def shift(row):
    row['F'] = np.where((row['A'] != 1) & ((row['C']<55) & (row['D']>=-1)), row['prev'] + 1, row['prev'])
    return row['F']

df['F'] = df.apply(shift, axis=1)