为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

吃鸡游戏 2022-07-05 19:32:06
我有一个纽约公寓数据库,其中有数千套出租公寓。我想要做的是基于“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 函数,但这似乎不允许这样做。
查看完整描述

2 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

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

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


查看完整回答
反对 回复 2022-07-05
?
MYYA

TA贡献1868条经验 获得超4个赞

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


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 方法,它们的要求不高,而且对了解同样有帮助。


查看完整回答
反对 回复 2022-07-05
  • 2 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信