有人可以帮我一个简单的功能来捕捉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
在捕捉High
和Low
之间的范围时,我很容易做到类似的功能:
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
答案 0 :(得分:3)
df['desired'] = (df['Open'] - df['Last']).abs()
这为您提供差异的绝对值(如果df['Last']
大于df['Open']
,则变为df['Last'] - df['Open']
)
另一方面,您的示例输出是df['Last'] - df['Open']
的结果,没有绝对值。