有什么方法可以使下面的代码更有效。
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 = pd.DataFrame({'A':[1,1,1, 0, 0, 0, 1, 0, 0], 'C':[1,1,1, 0, 0, 0, 1, 1, 1], 'D':[1,1,1, 0, 0, 0, 1, 1, 1],
'F':[1,1,1, 0, 0, 0, 1, 1, 1]})
我的输出应该像这样
>>> 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)
答案 0 :(得分:0)
使用F_previous
创建一个新列df.F.shift(1)
,这样一来您将获得1个移位的值作为新列。现在,使用该列和其他列编写函数以返回新的F
值,并使用apply
方法获取F
列的新值。