用于捕获不同列中值的变化的函数

时间:2016-08-07 08:42:05

标签: python pandas

有人可以帮我一个简单的功能来捕捉open和Last之间的变化,如下例所示:

数据:

             Open   High    Low    Last 
Timestamp                                       
2014-03-04  1783.50 1796.00 1783.50 1793.25
2014-03-05  1793.25 1796.50 1790.50 1794.00 
2014-03-06  1798.00 1802.25 1795.00 1797.75 
2014-03-07  1804.75 1805.50 1790.50 1798.75 

在捕捉HighLow之间的范围时,我很容易做到类似的功能:

def daily_range(df):
    return df['High'] - df['Low']

但我们如何使用OpenLast

执行类似的功能

我将在此函数上使用apply在我的数据框中获取一个新列,所需的输出如下所示:

           Open   High     Low     Last     Desired output
Timestamp                                       
2014-03-04  1783.50 1796.00 1783.50 1793.25   9.75
2014-03-05  1793.25 1796.50 1790.50 1794.00   0.75
2014-03-06  1798.00 1802.25 1795.00 1797.75  -0.25

基本上,如果Open高于Last我需要Open - Last,如果Last高于Open我需要做Last - Open。我可以在函数中使用if执行此操作,但必须有更好的方法来执行此简单任务,我想找到它。

更新

很抱歉,如果我的问题措辞不正确。然而,我确实显示了所需的输出,具有负值所需的输出(见上文)。

在2014-03-06下方,此举是-0.25,但答案中给出的代码显示0.25不是-0.25。你能帮帮忙吗?

             Open   Last    desired
Timestamp           
2014-03-04  1783.50 1793.25 9.75
2014-03-05  1793.25 1794.00 0.75
2014-03-06  1798.00 1797.75 0.25

1 个答案:

答案 0 :(得分:3)

df['desired'] = (df['Open'] - df['Last']).abs()

这为您提供差异的绝对值(如果df['Last']大于df['Open'],则变为df['Last'] - df['Open']

另一方面,您的示例输出是df['Last'] - df['Open']的结果,没有绝对值。