Python中R的ifelse语句的版本

10 投票
2 回答
7387 浏览
提问于 2025-05-16 19:50

我正在学习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的例子,其中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]
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']。这样的话,你就可以像你在问题中展示的那样,分两步来完成同样的操作。

撰写回答