学习了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']
但是这样会导致错误,希望能得到一些帮助。
学习了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']
相应的函数是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'] <1, 'X']
而不是df['X'][df['A'] <1]
。然后你可以像你在问题中展示的那样用两个步骤完成相同的操作。
在Python中,也可以使用列表推导式来实现R语言中的ifelse
等价操作。以下是一个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]
numpy
/pandas
,以获取类似的 Python 功能。 - juanpa.arrivillaga