我想知道是否有更快的方法来执行以下循环?可以使用应用或滚动应用功能来实现这一点
基本上,我需要访问前一行的值来确定当前单元格的值
df.ix[0]=(np.abs(df.ix[0])>;=So)*np.符号(df.ix[0])
对于范围(1,len(df))中的i:
对于列表中的列(df.columns.values):
如果((df[col].ix[i]>;1.25)&;(df[col].ix[i-1]==0)):
df[col].ix[i]=1
elif((df[col].ix[i]<;-1.25)和(df[col].ix[i-1]==0)):
df[col].ix[i]=-1
elif((df[col].ix[i]<;=-0.75)和(df[col].ix[i-1]<;0))|((df[col].ix[i]>;=0.5)和(df[col].ix[i-1]>;0)):
df[col].ix[i]=df[col].ix[i-1]
其他:
df[col].ix[i]=0
如您所见,在函数中,我正在更新数据帧,我需要访问最新的前一行,因此使用shift将不起作用
例如:
输入:
A B C
1.3 -1.5 0.7
1.1 -1.4 0.6
1.0 -1.3 0.5
0.4 1.4 0.4
输出:
A B C
1 -1 0
1 -1 0
1 -1 0
0 1 0
可以使用.shift()函数访问上一个或下一个值:
col列的上一个值:
df['col'].shift()
col列的下一个值:
df['col'].shift(-1)
例如:
[38]on
:df
Output[38]:
a、b、c
0 1 0 5
1 9 9 2
2 2 2 8
3 6 3 0
4 6 1 7
At[39]on:df['prev_a']=df['a'].shift()
In[40]:df
Output[40]:
上一篇
01105NaN
1 9 9 2 1.0
2 2 2 8 9.0
3 6 3 0 2.0
4 6 1 7 6.0
At[43]on:df['next_a']=df['a'].shift(-1)
In[44]:df
Output[44]:
a b c上一个a下一个a
01105NAN9.0
1 9 9 2 1.0 2.0
2 2 2 8 9.0 6.0
3 6 3 0 2.0 6.0
461766.0NAN