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)