Есть ли предел для элементов zip () в циклах в python? - PullRequest
0 голосов
/ 08 ноября 2018

Что-то странное случилось со мной сегодня. Мне нужно было создать список на основе последовательности операторов 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])]

Знаете ли вы, что происходит? Иначе, есть ли более эффективное решение моей проблемы?

Ответы [ 2 ]

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

Вы можете использовать bfill(axis=1) и выбрать первый столбец.

df.bfill(axis=1).iloc[:,0]

0    100.0
1     40.0
2     90.0
3    230.0
Name: prom_lect4b_rbd, dtype: float64

## For list
df.bfill(axis=1).iloc[:,0].tolist()
['100', '40', 90, '230']
0 голосов
/ 08 ноября 2018

Использование first_valid_index():

df.apply(lambda x: x[x.first_valid_index()], axis=1)

Урожайность:

0    100.0
1     40.0
2     90.0
3    230.0
dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...