Python 如何在pandas中使用多个boolen列映射函数?

Python 如何在pandas中使用多个boolen列映射函数?,python,pandas,Python,Pandas,我有一个纽约公寓的数据库,里面有成千上万的出租公寓。我想做的是根据“宠物级别”创建另一个专栏。它们是另外两列“dog_allowed”和“cat_allowed”,如果允许宠物,则它们的值为0或1 我希望在以下内容上创建“宠物级别”栏: 如果不允许养宠物,则为0 1如果允许的话 2如果允许的话 3如果两者都允许 我最初解决这个问题的方法如下: df['pet_level'] = df.apply(lambda x: plev(0 = x[x['dog_allowed'] == 0 & x

我有一个纽约公寓的数据库,里面有成千上万的出租公寓。我想做的是根据“宠物级别”创建另一个专栏。它们是另外两列“dog_allowed”和“cat_allowed”,如果允许宠物,则它们的值为0或1

我希望在以下内容上创建“宠物级别”栏: 如果不允许养宠物,则为0 1如果允许的话 2如果允许的话 3如果两者都允许

我最初解决这个问题的方法如下:

df['pet_level'] = df.apply(lambda x: plev(0 = x[x['dog_allowed'] == 0 & x['cat_allowed'] == 0] ,1 = x[x['cat_allowed'] == 1], 2 = x[x['dog_allowed'] == 1], 3 = x[x['dog_allowed'] == 1 & x['cat_allowed'] == 1]))
只是因为我用类似的方式做了更小的测试数据集


我使用apply方法尝试了一个lambda函数,但这似乎不允许这样做。

当前有效的方法是使用所需的条件语句定义一个函数

def plvl(db):
    if db['cats_allowed'] == 0 and db['dogs_allowed'] == 0:
        val = 0
    elif db['cats_allowed'] == 1 and db['dogs_allowed'] == 0:
        val = 1
    elif db['cats_allowed'] == 0 and db['dogs_allowed'] == 1:
        val = 2
    elif db['cats_allowed'] == 1 and db['dogs_allowed'] == 1:
        val = 3
    return val
然后通过沿列(
axis=1
)应用函数来传递该函数,以创建所需的列

df['pet_level'] = df.apply(plvl, axis=1)

我不确定这是否是最有效的性能,但出于测试目的,它目前可以工作。我确信有更多的pythonic方法要求较低,也同样有助于了解这些方法。

您可以像这样对操作进行矢量化,而不是映射:

df['pet_level'] = df['dog_allowed'] * 1 + df['cat_allowed'] * 2

请提供您解决此问题的尝试检查:这是我最初认为的解决此问题的好方法,但它不起作用。