python - bool 逻辑的模糊真值

标签 python excel algorithm pandas data-analysis

我试图在数据框的函数中使用一些 bool 逻辑,但出现错误:

在[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')

我读了How to look back at previous rows from within Pandas dataframe function call?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 最初的问题隐藏了另一个问题,该问题在取出函数的移位部分时出现。返回形状不匹配,但这是另一个问题,只是在这里提及它以进行全面披露

关于python - bool 逻辑的模糊真值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28255734/

相关文章:

python - 如何将我的数据插入现有的 excel 文件

algorithm - 如何找到总和刚好高于阈值的元素组合

Python 算法 : Necklace Generation/Circular Permutations

python - pytest fixtures 以什么顺序执行?

python - 如何在Python日志模块中指定级别?

python - mfcc特征大小如何影响递归神经网络

algorithm - 将搜索的时间复杂度降低到小于 n^2

python - 从相同的类名中提取文本(Python 网络抓取)

excel - 如果 B 列不为空,则在 C 列中插入公式

Excel VBA : use of specialcells doesn't work if worksheet is protected