python pandas dataframes根据其他2 col的值添加列

时间:2015-11-23 00:15:18

标签: python-2.7 pandas

我终于得到了一条消息,我预计可以解决我的问题。我在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'

如果有人可以提供帮助吗?

2 个答案:

答案 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的回答更适合你的情况。