Я обычно делаю эту функцию отдельно от всех моих проектов. Быстро и просто.
unfactorize <- function(df){
for(i in which(sapply(df, class) == "factor")) df[[i]] = as.character(df[[i]])
return(df)
}
Мне нравится np.where. Вот решение с ним:
import numpy as np
df.loc[:,'position1'] = np.where((df['switchopen'] == True) & (df['switchclose'] == False), 'open',
np.where((df['switchopen'] == False) & (df['switchclose'] == True), 'closed',
np.where((df['switchopen'] == False) & (df['switchclose'] == False), 'moving',
np.nan)))
Как видите, вы не можете установить NaN ни для одного из условий.
Учитывая ваши логические требования и ожидаемые результаты, это должно сработать
df.loc[(df['switchopen'] == True) & (df['switchclose'] == False), 'Position'] = 'open'
df.loc[(df['switchopen'] == False) & (df['switchclose'] == True), 'Position'] = 'closed'
df.loc[(df['switchopen'] == False) & (df['switchclose'] == False), 'Position'] = 'moving'