Предположит, что у нас есть test
набора данных:Уплотненной IfElse альтернативы панд
value group
123 1
120 1
NA 1
130 1
23 2
22 2
24 2
NA 2
Теперь мы хотим, чтобы заменить недостающие значения с group
-wise средних значений. В R
мы можем сделать это, используя вложенный вызов ifelse
.
first.med <- median(test[test$group == 1, ]$value, na.rm = T)
second.med <- median(test[test$group == 2, ]$value, na.rm = T)
test$value <- ifelse(is.na(test$value) & test$group == 1, first.med
ifelse(is.na(test$value) & test$group == 2, second.med,
test$value))
я хотя о применении numpy.where
функции или метода pandas.DataFrame.Set.map
как демонстрировалось here, но оба метода не поддерживает вложенность. Я могу подумать о понимании списка, но я хочу знать, есть ли альтернатива в области NumPy/pandas. Заранее спасибо.
почему вы должны сделать вложенные if-то еще заявления? например, в r это, как правило, плохая практика, и вы можете просто делать это с помощью (test, ave (value, group, FUN = function (x) {x [is.na (x)] <- медиана (x, na .rm = TRUE); x})) ', который будет работать для n групп – rawr
Вам нужно узнать о [groupby /"Split-Apply-Combine"](http://pandas.pydata.org/pandas-docs/stable /groupby.html). Это очень сильная парадигма. Также намного более чистый код. Ответ на @ chrisb – smci
@rawr Я просто привык к 'ifelse'. Ваш фрагмент выглядит намного лучше. –