繁体   English   中英

具有布尔逻辑的模糊真值

[英]Ambiguous truth value with boolean logic

我正在尝试在数据框上的函数中使用一些布尔逻辑,但出现错误:

在[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,但无法弄清楚如何将其应用于我的问题?

最大功能使用不充分。 np.maximum(也许是np.ma.max以及每个numpy文档)都可以工作。 显然,常规max不能(轻松)处理数组。 更换

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原来的问题是隐藏另一个在取出函数的移位部分时出现的问题。 返回形状不匹配,但这是另一个问题,在此仅提及以作全面披露

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM