<p>@maxU有shift的权利,我想你甚至可以直接比较数据帧,如下所示:</p>
<pre><code>df_prev = df.shift(-1)
df_out = pd.DataFrame(index=df.index,columns=df.columns)
df_out[(df>1.25) & (df_prev == 0)] = 1
df_out[(df<-1.25) & (df_prev == 0)] = 1
df_out[(df<-.75) & (df_prev <0)] = df_prev
df_out[(df>.5) & (df_prev >0)] = df_prev
</code></pre>
<p>语法可能是关闭的,但如果您提供一些测试数据,我认为这可以工作。</p>
<p>省得你必须循环。</p>
<p><strong>编辑-根据下面的注释更新</strong></p>
<p>我会尽我最大的努力不通过DF本身。最好是一列一列地进行,发送到一个列表并进行更新,然后再重新导入。像这样的:</p>
<pre><code>df.ix[0] = (np.abs(df.ix[0]) >= 1.25) * np.sign(df.ix[0])
for col in df.columns.tolist():
currData = df[col].tolist()
for currRow in range(1,len(currData)):
if currData[currRow]> 1.25 and currData[currRow-1]== 0:
currData[currRow] = 1
elif currData[currRow] < -1.25 and currData[currRow-1]== 0:
currData[currRow] = -1
elif currData[currRow] <=-.75 and currData[currRow-1]< 0:
currData[currRow] = currData[currRow-1]
elif currData[currRow]>= .5 and currData[currRow-1]> 0:
currData[currRow] = currData[currRow-1]
else:
currData[currRow] = 0
df[col] = currData
</code></pre>