Что-то странное случилось со мной сегодня. Мне нужно было создать список на основе последовательности операторов if. Мой фрейм данных выглядит примерно так:
prom_lect4b_rbd prom_lect2m_rbd prom_lect8b_rbd prom_lect6b_rbd
100 np.nan 80 200
np.nan np.nan 40 1000
np.nan np.nan np.nan 90
230 100 80 100
Столбцы упорядочены в соответствии с их приоритетом. Список (или столбец), который я пытаюсь создать, получает первое значение из тех строк, которые не nan
. Итак, в данном случае я хочу столбец, который выглядит следующим образом:
simce_final_lect
100
40
90
230
Я попробовал следующее:
cols=[simces.prom_lect4b_rbd, simces.prom_lect2m_rbd, simces.prom_lect8b_rbd, simces.prom_lect6b_rbd]
simce_final_lect=[j if np.isnan(j)==False else k if np.isnan(k)==False
else l if np.isnan(l)==False else m if np.isnan(m)==False
else np.nan for j,k,l,m in zip(cols[0],cols[1],cols[2],cols[3])]
И это просто копирует два значения (из 8752) в список. Но если я ограничу свой почтовый индекс только j,k,l
, он отлично работает:
simce_final_lect=[j if np.isnan(j)==False else k if np.isnan(k)==False
else l if np.isnan(l)==False
else np.nan for j,k,l in zip(cols[0],cols[1],cols[2])]
Знаете ли вы, что происходит? Иначе, есть ли более эффективное решение моей проблемы?