ifelse оператор в Python похож на R - PullRequest
0 голосов
/ 26 ноября 2018

Есть ли в Python оператор ifelse, похожий на R?У меня есть pandas.core.series.Series ds длиной 64843. Мне нужно взять журнал каждой точки данных этой серии.Некоторые значения в серии равны 0. В RI можно написать

ifelse(ds==0,0,log(z))

Но в python я не вижу подобного типа утверждений.Можете ли вы вести меня?

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

Может быть

ds[0 if ds == 0 else math.log(ds)]
0 голосов
/ 26 ноября 2018

Я думаю, что в вашем случае проще просто сначала ввести 0, а затем вызвать log:

ds[ds == 0] = 1
ds = np.log(ds)

Будьте осторожны, если в вашей Серии есть значения от 0 до1, они будут отображаться на -Inf и 0, поэтому ваш масштаб больше не будет непрерывным.

0 голосов
/ 26 ноября 2018

Полагаю, вам нужно numpy.where в целом, но для log возможно добавить параметр where в numpy.log.

Эта функция возвращаетмассив numy 1d, поэтому для нового Series необходим конструктор:

s = pd.Series([0,1,5])

s1 = pd.Series(np.log(s,where=s>0), index=s.index)

или:

s1 = pd.Series(np.where(s==0,0,np.log(s)), index=s.index)
print (s1)
0    0.000000
1    0.000000
2    1.609438
dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...