我有一个纽约公寓数据库,其中有数千套出租公寓。我想要做的是基于“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
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 方法,它们的要求不高,而且对了解同样有帮助。
添加回答
举报
0/150
提交
取消