用布尔逻辑模糊真值

我想在一个数据框的函数中使用一些布尔逻辑,但得到一个错误:

在[4]中:

data={'level':[20,19,20,21,25,29,30,31,30,29,31]} frame=DataFrame(data) frame Out[4]: level 0 20 1 19 2 20 3 21 4 25 5 29 6 30 7 31 8 30 9 29 10 31 In [35]: def calculate(x): baseline=max(frame['level'],frame['level'].shift(1))#doesnt work #baseline=x['level']+4#works difftobase=x['level']-baseline return baseline, difftobase frame['baseline'], frame['difftobase'] = zip(*frame.apply(calculate, axis=1))#works 

但是,这会引发以下错误:

 baseline=max(frame['level'],frame['level'].shift(1))#doesnt work ValueError: ('The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', u'occurred at index 0') 

我读了如何从Pandas数据框函数调用中回顾以前的行? 和http://pandas.pydata.org/pandas-docs/stable/gotchas.html但无法弄清楚如何将这个应用到我的问题?

function使用不足 np.maximum(也许np.ma.max以及每个numpy文档)的作品。 显然规则最大不能处理数组(很容易)。 更换

 baseline=max(frame['level'],frame['level'].shift(1))#doesnt work 

 baseline=np.maximum(frame['level'],frame['level'].shift(1)) 

做的伎俩。 我删除了另一部分,使其更容易阅读:

 In [23]: #q 1 analysis def calculate_rowise(x): baseline=np.maximum(frame['level'],frame['level'].shift(1))#works return baseline frame.apply(calculate_rowise) Out[23]: level 0 NaN 1 20 2 20 3 21 4 25 5 29 6 30 7 31 8 31 9 30 10 31 

PS原来的问题是隐藏另一个问题,出现时,取出function的移位部分。 返回形状不匹配,但这是另一个问题,只是在这里提到它的全面披露