【发布时间】:2015-03-31 02:24:11
【问题描述】:
我正在尝试在数据帧的函数中使用一些布尔逻辑,但出现错误:
在[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 但不知道如何将其应用于我的问题?
【问题讨论】:
-
您所要求的可以通过使用
masking and where()和shift来实现 -
我建议你看看我的 cmets 中的那些链接,尝试一些事情,然后返回数据、代码、预期输出,如果你卡住了任何错误回溯
-
在收到反对票后,我试图通过删除更大的部分、不必要的绒毛和第二个问题(移至另一个问题)来改进问题。作为本网站的初学者,任何反对投票的建设性 cmets 肯定会受到赞赏!
-
-
不,它是一个适当的编辑(希望改进),以及将一部分分离到另一个问题。但我正在考虑删除这个并从头开始重新发布,因为我怀疑一个被否决的问题会得到很大的吸引力。另一方面,删除和转发是否构成“不良行为”?还张贴的 cmets 不再与这个问题相提并论。让我们来看看。也许我会把它放在那里一天,然后重新发布。
标签: python excel algorithm pandas data-analysis