当我执行下面的代码时,即使满足“if”条件,它也只执行“else”子句。 例如
public function setUser($id){
$user = PersonalUser::findOrFail($id);
if($user->approved == 0 && $user->business_user_id != NULL){
$user->approved = 0;
$user->business_user_id = NULL;
$user->save();
}
}
满足“if”阻止条件(即)
Date 05/01/2006
Open 5521.86
Low 5502.25
Close.shift(1) 5523.620117
然而,“if”块永远不会被执行。请协助
DAX_Logic < 1 *(value is 0.99968132240039786)*
我尝试使用下面一段代码,下面的部分只执行“If”块而不是“else”阻止...在上面和下面的代码中混淆了我的错误。(它们产生完全相反的结果)
DAX=pd.io.data.DataReader("^GDAXI","yahoo",start,end)
DAX_Logic= DAX['Open'].fillna(1) / DAX['Close'].shift(1).fillna(1)
DAX_Logic_1= DAX['Low'].fillna(1) / DAX['Open'].fillna(1)
if DAX_Logic.any() < 1:
Daily_Return = 100*(DAX['Low']-DAX['Open'])
else:
Daily_Return = (-100)*(DAX['Close']-DAX['Open'])
答案 0 :(得分:0)
目前,您正在使用for
和if
运行通用python来代替向量化的pandas操作,例如通过与另一个系列进行逻辑索引来有条件地创建列(即系列)。
首先考虑将 DAX_Logic 和 DAX_Logic_1 添加为 DAX 数据框中与其他行内联的新列,以便您使用loc
创建 Daily_Return 列:
DAX = pd.io.data.DataReader("^GDAXI","yahoo",start,end)
# NEW COLUMNS (NOT SEPARATE SERIES)
DAX['DAX_Logic'] = DAX['Open'].fillna(1) / DAX['Close'].shift(1).fillna(1)
DAX['DAX_Logic_1'] = DAX['Low'].fillna(1) / DAX['Open'].fillna(1)
# DAILY RETURN
DAX.loc[DAX['DAX_Logic'] > 1, 'Daily_Return'] = 100*(DAX['Low']-DAX['Open'])
DAX.loc[DAX['DAX_Logic'] <= 1, 'Daily_Return'] = (-100)*(DAX['Close']-DAX['Open'])
或者,使用numpy的np.where()
进行矢量化if / else计算:
import numpy as np
DAX['Daily_Return'] = np.where(DAX['DAX_Logic'] > 1, 100*(DAX['Low']-DAX['Open']), (-100)*(DAX['Close']-DAX['Open']))
如果您希望 Daily_Return 独立于数据框列之外,只需分配它,因为pandas数据框中的每一列都是一个pandas系列:
Daily_Return = DAX['Daily_Return']