Python中R的ifelse语句的版本
我正在学习Python,之前学过R语言和简单的ifelse语句。
在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 个回答
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]
20
相应的功能是np.where
:
import numpy as np
np.where(df['A'] < 1, -df['X'], df['X'])
这个功能会检查列A
里的值是否小于1。如果小于1,它就会返回df['X']
中对应的值乘以-1;如果不小于1,则返回df['X']
中对应的值。
不过,你的错误或警告可能是因为使用了链式索引。也就是说,不应该用df['X'][df['A'] <1]
这种写法,而应该用df.loc[df['A'] <1, 'X']
。这样的话,你就可以像你在问题中展示的那样,分两步来完成同样的操作。