Python 函数以捕获不同列中值之间的更改

Python 函数以捕获不同列中值之间的更改,python,pandas,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

是否有人可以帮助我使用一个简单的函数来捕获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 
对于我来说,在捕获诸如
之间的范围时,使用以下工具执行类似的功能非常简单:

def daily_range(df):
    return df['High'] - df['Low']
但是我们如何使用
Open
Last
实现类似的功能呢

我将在此函数上使用
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
这将为您提供差值的绝对值(如果
df['Last']
大于
df['Open']
,它将变为
df['Last']-df['Open']

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

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


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

谢谢。当我尝试应用时,
d1['OC\u Range']=d1.apply(open\u close\u Range,axis=1)
我得到了
AttributeError:(“'float'对象没有属性'abs',发生在索引2014-03-04 00:00:00')
为什么要使用apply?什么是“打开\关闭\范围”?请忽略我最后的评论。但是abs并没有给我负值。“基本上,如果Open高于Last,我需要执行Open-Last,如果Last高于Open,我需要执行Last-Open。”根据这个定义,你不应该有负值?你的输出看起来像是
df[Last']-df['Open']
的结果。谢谢。当我尝试应用时,
d1['OC\u Range']=d1.apply(open\u close\u Range,axis=1)
我得到了
AttributeError:(“'float'对象没有属性'abs',发生在索引2014-03-04 00:00:00')
为什么要使用apply?什么是“打开\关闭\范围”?请忽略我最后的评论。但是abs并没有给我负值。“基本上,如果Open高于Last,我需要执行Open-Last,如果Last高于Open,我需要执行Last-Open。”根据这个定义,你不应该有负值?你的输出看起来像是
df[Last']-df['Open']
的结果。
df['desired'] = (df['Open'] - df['Last']).abs()