Nat*_*ylo 5 python nested dataframe pandas
我是想加入Pandas的长期SAS用户。我想根据各种if条件设置列的值。我想我可以使用嵌套的np.where命令来做到这一点,但我想我会检查是否有更优雅的解决方案。例如,如果我设置了一个左边界和右边界,并且想返回一列字符串值,以了解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
Run Code Online (Sandbox Code Playgroud)
可以使用np.where来检查一种情况:
df['area'] = np.where(df['x']>df['rbound'],'right','somewhere else')
Run Code Online (Sandbox Code Playgroud)
但是不确定该怎么做,我想在一行中检查多个if-else ifs。
输出应为:
df
lbound rbound x area
0 -1 1 0 middle
1 5 7 1 left
2 0 1 2 right
Run Code Online (Sandbox Code Playgroud)
选项1
您可以使用嵌套np.where语句。例如:
df['area'] = np.where(df['x'] > df['rbound'], 'right',
np.where(df['x'] < df['lbound'],
'left', 'somewhere else'))
Run Code Online (Sandbox Code Playgroud)
选项 2
您可以使用.loc访问器来分配特定范围。请注意,您必须在使用前添加新列。我们借此机会设置了默认值,以后可能会被覆盖。
df['area'] = 'somewhere else'
df.loc[df['x'] > df['rbound'], 'area'] = 'right'
df.loc[df['x'] < df['lbound'], 'area'] = 'left'
Run Code Online (Sandbox Code Playgroud)
解释
这些都是具有可比性能的有效替代方案。在这两种情况下,计算都是矢量化的。我更喜欢选项 2,因为它看起来更具可读性。如果有大量嵌套条件,np.where可能会更方便。
| 归档时间: |
|
| 查看次数: |
403 次 |
| 最近记录: |