我终于得到了一条消息,我预计可以解决我的问题。我在dataFrame(height,upper)中有两列,其值为1或0.这个组合是4个元素,我试图创建包含4个组合的第三列,但我无法弄清楚会发生什么错了,我的代码如下:
def quad(clasif):
if (raw['upper']==0 and raw['height']==0):
return 1
if (raw['upper']==1 and raw['height']==0):
return 2
if (raw['upper']==0 and raw['height']==1):
return 3
if (raw['upper']==1 and raw['height']==1):
return 4
raw['cuatro']=raw.apply(lambda clasif: quad(clasif), axis=1)
我收到以下错误:
'系列的真值是模棱两可的。使用a.empty,a.bool(),a.item(),a.any()或a.all()。',u'occurred at index 0'
如果有人可以提供帮助吗?
答案 0 :(得分:1)
假设鞋面和高度只能是0或1,你可以将其重写为一个简单的补充:
raw['cuatro'] = 1 + raw['upper'] + 2 * raw['height']
您看到此错误的原因是raw['upper'] == 0
是布尔系列,您无法使用和 ...请参阅"gotcha" section of the docs。
我认为你错过了申请的基础知识,当通过系列clasif
时,你的函数应该对clasif
做一些事情(目前,函数体没有提到它)。
答案 1 :(得分:0)
您必须将该功能传递给apply
。
import pandas as pd
def quad(clasif):
if (clasif['upper']==0 and clasif['height']==0):
return 1
if (clasif['upper']==1 and clasif['height']==0):
return 2
if (clasif['upper']==0 and clasif['height']==1):
return 3
if (clasif['upper']==1 and clasif['height']==1):
return 4
raw = pd.DataFrame({'upper': [0, 0, 1, 1], 'height': [0, 1, 0, 1]})
raw['cuatro']=raw.apply(quad, axis=1)
print raw
height upper cuatro
0 0 0 1
1 1 0 3
2 0 1 2
3 1 1 4
Andy Hayden的回答更适合你的情况。