回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>以下是我开始使用的数据帧:</p>
<pre><code>import pandas as pd
import numpy as np
d= {'PX_LAST':[1,2,3,3,3,1,2,1,1,1,3,3],'ma':[2,2,2,2,2,2,2,2,2,2,2,2],'action':[0,0,1,0,0,-1,0,1,0,0,-1,0]}
df_zinc = pd.DataFrame(data=d)
df_zinc
</code></pre>
<h3>现在,我需要添加一个名为“buy\u sell”的列,它是:</h3>
<ul>
<li>当'action'==1时,如果'PX\u LAST'>;'ma',则填充1,如果'PX\u LAST'<;'ma',则填充-1</li>
<li>当'action'==-1时,使用与先前填充的非零值相反的值填充</li>
</ul>
<p>仅供参考:在我的数据中,需要填充前一个非零值项的对立面的行与前一个非零值项的距离总是相同的(即当前示例中的2)。这应该有助于制定代码。你知道吗</p>
<h3>到目前为止,我编写的代码如下。在我看来是对的。你有什么建议吗?</h3>
<pre><code> while index < df_zinc.shape[0]:
if df_zinc['action'][index] == 1:
if df_zinc['PX_LAST'][index]<df_zinc['ma'][index]:
df_zinc.loc[index,'buy_sell'] = -1
else:
df_zinc.loc[index,'buy_sell'] = 1
elif df_zinc['action'][index] == -1:
df_zinc['buy_sell'][index] = df_zinc['buy_sell'][index-3]*-1
index=index+1
df_zinc
</code></pre>
<h3>生成的数据帧如下所示:</h3>
<pre><code> df_zinc['buy_sell'] = [0,0,1,0,0,-1,0,-1,0,0,1,0]
df_zinc
</code></pre>