【问题标题】:Python version of R's ifelse statementR if else 语句的 Python 版本
【发布时间】:2017-04-30 20:31:16
【问题描述】:

在学习了 R 和一个简单的 ifelse 语句之后,我正在尝试学习 Python。

在 R 中我有:

df$X <- if(df$A == "-1"){-df$X}else{df$X}

但我不确定如何在 Python 中实现它,我尝试过:

df['X'][df['A'] <1] = -[df['X']
df['X'][df['A'] >1] = [df['X']

但这会导致错误,希望得到一些帮助。

【问题讨论】:

  • 提示,python 一般不会向量化,所以如果你在 R 代码中使用某种向量化,你想看看numpy/pandas使用 Python 实现类似功能。
  • 感谢 juanpa.arrivillage

标签: python r pandas if-statement


【解决方案1】:

相当于np.where:

import numpy as np
np.where(df['A'] < 1, -df['X'], df['X'])

这会检查A列中的值是否小于1。如果是,则返回df['X']中的对应值乘以-1,否则返回df['X']中的对应值。

也就是说,您的错误/警告可能是由于链式索引而引发的。你应该使用df.loc[df['A'] &lt;1, 'X'] 而不是df['X'][df['A'] &lt;1]。然后您可以按照问题中显示的两个步骤执行相同的操作。

【讨论】:

    【解决方案2】:

    也可以使用列表推导在 Python 中执行与 R 的 ifelse 等效的操作。显示 Python 3 中的示例,lm 等效于 df['A']df['X']

    l = [ 1, 2, -3, -4, -5]
    m = [ 10, 20, -30, -40, 50]
    
    k = [ y if x>0 else -y for x,y in list(zip(l,m))]
    k
    >>> [10, 20, 30, 40, -50]
    

    这消除了对numpy的依赖

    此外,它还可以用于过滤掉不必要的值

    k2 = [ y  for x,y in list(zip(l,m)) if x>0]
    k2
    >>>[10, 20]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-23
      • 2022-12-22
      • 2019-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多