R版本的ifelse语句的Python版本

时间:2017-04-30 20:31:16

标签: python r pandas if-statement

我在学习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']

但是这会导致错误,会感激一些帮助。

2 个答案:

答案 0 :(得分:13)

等效于np.where

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

这将检查列A中的值是否低于1.如果是,则返回df['X']中相应的值乘以-1,否则返回df['X']中的相应值}。

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

答案 1 :(得分:0)

也可以使用列表推导来等效于Python中的ifelse的R。显示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]