使用np.where将循环转换为矢量格式时出现ValueError

时间:2019-05-21 16:56:29

标签: pandas numpy for-loop

在np.where条件中使用min,max函数时出现以下错误。

ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

我想将“ for”循环转换为更快的计算,所以我尝试使用“ np.where”功能切换我的计算。

循环代码的原始工作

for p in range (1,len(curve_details)):                       
      curve_details.loc[p,'coupon_after']=max(floor,min(ceiling, 
      curve_details.loc[p-1,'coupon_after']                                                       
      + max(move_cap_down, min(move_cap_up,                                                          
      curve_details.loc[p,'coupon_before']                                                          
      -curve_details.loc[p-1,'coupon_after']))))

我正在尝试的新代码

curve_details['coupon_after']=np.where(curve_details.index>0,
                             max(floor,min(ceiling, 
                             curve_details.loc[curve_details.index- 
                             1,'coupon_after'] + max(move_cap_down, 
                             min(move_cap_up,                       
                  curve_details.loc[curve_details.index,'coupon_before']
                              -curve_details.loc[curve_details.index- 
                             1,'coupon_after'])))),int_rate)

我想加速我的for循环,因此已切换到“ np.where”功能。我现在可以在代码中进行哪些更改以消除值错误?

1 个答案:

答案 0 :(得分:0)

您不能在数组和标量上使用裸maxmin。尝试使用np.clip。我没有示例数据,因此无法在您的代码中显示。但是一个简单的例子:

x = np.arange(10)
cap = 6
low = 3
np.clip(x, low, cap)

# is equivalent to (and much better than):
np.array([max(low, min(cap, i)) for i in x])