数据框中两个数字之间的除法

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 位置编号。是否可以将索引位置转换为整数,以便您可以使用它来计算信号索引。再次感谢 是的,你可以,请检查编辑。此外,如果符合您的要求,请将答案标记为正确。 是的,这行得通。我点击了绿色复选标记,我认为这意味着回答正确。如果我遗漏了什么,请添加另一条评论,我可以进行调整。谢谢你帮助我

以上是关于数据框中两个数字之间的除法的主要内容,如果未能解决你的问题,请参考以下文章

输出除法结果,包括小数点后的数字 - Qt

在滚动散列中,散列函数的除法方法中使用的素数与为数字选择的基数之间的关系是啥?

EXCEL表格中,怎么把一列数字做除法,保留小数点两位?

用辗转相除法求两个整数的最大公约数

线段树维护区间开方/除法

NumPy中模数(%)和地板除法(//)之间的区别?