布尔逻辑的模糊真值
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')
我读了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 原来的问题是隐藏了另一个问题,这个问题是在取出函数的移位部分时出现的。 return 形状不匹配,但这是另一个问题,只是在这里提及它以进行全面披露
我试图在数据框的函数中使用一些布尔逻辑,但出现错误:
在 [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 原来的问题是隐藏了另一个问题,这个问题是在取出函数的移位部分时出现的。 return 形状不匹配,但这是另一个问题,只是在这里提及它以进行全面披露