我在学习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']
但是这会导致错误,会感激一些帮助。
答案 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中的示例,其中l
和m
等效于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]