基于多个条件创建列

2024-09-28 05:20:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个长期的SAS用户,想进入熊猫。我想根据各种if条件设置列的值。我想我可以用嵌套的np.哪里命令,但我想看看是否有更优雅的解决方案。例如,如果我设置了一个左边界和右边界,并且想要返回一列字符串值,如果x是这些边界的左、中或右,那么最好的方法是什么?基本上,如果x<;lbound返回“left”,否则如果lbound<;x<;rbound返回“middle”,否则如果x>;rbound返回“right”。在

df
   lbound   rbound  x
0   -1      1       0
1   5       7       1
2   0       1       2

可以使用np.哪里公司名称:

^{pr2}$

但不知道该怎么做,我想在一行中检查多个if-else。在

输出应为:

df
   lbound   rbound  x    area
0   -1      1       0    middle
1   5       7       1    left
2   0       1       2    right

Tags: 用户命令ltrightmiddledfifnp
2条回答

您可以使用numpy select代替np.哪里在

cond = [df['x'].between(df['lbound'], df['rbound']), (df['x'] < df['lbound']) , df['x'] > df['rbound'] ]
output = [ 'middle', 'left', 'right']

df['area'] = np.select(cond, output, default=np.nan)



    lbound  rbound  x   area
0   -1      1       0   middle
1   5       7       1   left
2   0       1       2   right

选项1

可以使用嵌套的np.where语句。例如:

df['area'] = np.where(df['x'] > df['rbound'], 'right', 
                      np.where(df['x'] < df['lbound'],
                               'left', 'somewhere else'))

选项2

{cd2>可以指定访问范围。请注意,在使用前必须添加新列。我们借此机会设置默认值,稍后可能会被覆盖。在

^{pr2}$

说明

这些都是有效的替代方案,性能相当。两种情况下的计算都是矢量化的。我倾向于选择2,因为它看起来更具可读性。如果有大量的嵌套条件,np.where可能更方便。在

相关问题 更多 >

    热门问题