比较布尔系列

时间:2019-01-23 14:44:16

标签: python pandas numpy dataframe

我需要一些帮助。

我有一个带有int列的数据框。我要测试这些值。

test1 = (data['CC'].shift(1) > 50) & (data['CC'] < 50)
test2 = (data['CC'].shift(1) < -50) & (data['CC'] > -50)

此代码有效,并返回一系列2000行。我对此没有问题。

0    False
1    False
2    False
3    False
4    False
Name: CCI, dtype: bool

我想使用本系列来添加新列。

if(test1):
    data['Sloop'] = '+S'
elif(test2):
    data['Sloop'] = '-S'
else:
    data['Sloop'] = 'N'

if语句不起作用:

  

ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

当然,这里存在test1和test2。真正的代码是:

if((data['CC'].shift(1) > 50) & (data['CC'] < 50)):
    data['Sloop'] = '+S'
elif((data['CC'].shift(1) < -50) & (data['CC'] > -50)):
    data['Sloop'] = '-S'
else:
    data['Sloop'] = 'N'

相同错误。请帮忙。

谢谢

1 个答案:

答案 0 :(得分:1)

使用numpy.select

test1 = (data['CC'].shift(1) > 50) & (data['CC'] < 50)
test2 = (data['CC'].shift(1) < -50) & (data['CC'] > -50)

data['Sloop'] = np.select([test1, test2], ['+S','-S'], default='N')