如何在熊猫中使用多个布尔列映射函数?

我有一个纽约公寓数据库,其中有数千套出租公寓。我想要做的是基于“pet_level”创建另一个列。它们是另外两列“dog_allowed”和“cat_allowed”,如果允许宠物,则它们的值为 0 或 1

我希望在此创建“pet_level”列: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 函数,但这似乎不允许这样做。


吃鸡游戏
浏览 108回答 2
2回答

幕布斯6054654

您可以像这样对操作进行矢量化,而不是映射:df['pet_level'] = df['dog_allowed'] * 1 + df['cat_allowed'] * 2

MYYA

当前有效的方法是使用所需的条件语句定义一个函数。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然后通过沿 columns( axis=1) 应用函数来传递该函数以创建所需的列。df['pet_level'] = df.apply(plvl, axis=1)我不确定这是否是性能效率最高的,但出于测试目的,它目前可以工作。我敢肯定,还有更多的 Pythonic 方法,它们的要求不高,而且对了解同样有帮助。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python