我正在尝试计算当另一列的信号被触发时,一列中两个数字之间的百分比变化。
可以找到触发器,np.where()
但我遇到的麻烦是百分比变化。.pct_change
不起作用是因为如果.pct_change(-5)
得到的话16.03/20.35
,我想要号码相反的号码20.35/16.03
。见下表。我尝试过从中的索引返回数组np.where
并将其添加到.iloc
“关闭”列中的,但是它说我无法使用该数组来获取.iloc
位置。谁能帮我解决这个问题。谢谢你。
IdxNum | Close | Signal (1s)
==============================
0 21.45 0
1 21.41 0
2 21.52 0
3 21.71 0
4 20.8 0
5 20.35 0
6 20.44 0
7 16.99 0
8 17.02 0
9 16.69 0
10 16.03 1<< 26.9% <<< 20.35/16.03-1 (df.Close[5]/df.Close[10]-1)
11 15.67 0
12 15.6 0
您可以尝试以下代码块:
#Create DataFrame
df = pd.DataFrame({'IdxNum':range(13),
'Close':[21.45,21.41,21.52,21.71,20.8,20.35,20.44,16.99,17.02,16.69,16.03,15.67,15.6],
'Signal':[0] * 13})
df.ix[10,'Signal']=1
#Create a function that calculates the reqd diff
def cal_diff(row):
if(row['Signal']==1):
signal_index = int(row['IdxNum'])
row['diff'] = df.Close[signal_index-5]/df.Close[signal_index]-1
return row
#Create a column and apply that difference
df['diff'] = 0
df = df.apply(lambda x:cal_diff(x),axis=1)
如果您没有IdxNum列,则可以使用索引来计算差异
#Create DataFrame
df = pd.DataFrame({
'Close':[21.45,21.41,21.52,21.71,20.8,20.35,20.44,16.99,17.02,16.69,16.03,15.67,15.6],
'Signal':[0] * 13})
df.ix[10,'Signal']=1
#Calculate the reqd difference
df['diff'] = 0
signal_index = df[df['Signal']==1].index[0]
df.ix[signal_index,'diff'] = df.Close[signal_index-5]/df.Close[signal_index]-1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句