数据框中两个数字之间的除法
Posted
技术标签:
【中文标题】数据框中两个数字之间的除法【英文标题】:Division between two numbers in a Dataframe 【发布时间】:2016-12-03 05:04:19 【问题描述】:当触发来自另一列的信号时,我试图计算一列中两个数字之间的百分比变化。
可以使用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
【问题讨论】:
所以你想创建另一个存储差异的列? 是的,抱歉,不太清楚。我想要一个新的数据框列,只要信号列中有一个 1 就可以进行除法。 pct_change 不起作用,因为它计算 df.Close[10]/df.Close[5] 而我想相反 >> df.Close[5]/df.Close[10]-1。谢谢 我已经更新了答案以符合您的要求,如果符合您的要求,请将其标记为正确 【参考方案1】:你可以试试这个代码块:
#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
【讨论】:
这很好用。谢谢你的帮助。只是想知道我是否在数据帧中没有 IdxNum 列,您是否可以从数据帧中的实际索引本身创建 signal_index 位置编号。是否可以将索引位置转换为整数,以便您可以使用它来计算信号索引。再次感谢 是的,你可以,请检查编辑。此外,如果符合您的要求,请将答案标记为正确。 是的,这行得通。我点击了绿色复选标记,我认为这意味着回答正确。如果我遗漏了什么,请添加另一条评论,我可以进行调整。谢谢你帮助我以上是关于数据框中两个数字之间的除法的主要内容,如果未能解决你的问题,请参考以下文章