Есть ли лучший, более читаемый способ объединения столбцов в пандах

Мне часто нужен новый столбец, который является лучшим, которого я могу достичь из других столбцов, и у меня есть конкретный список приоритетов предпочтений. Я готов принять первое ненулевое значение.

def coalesce(values):
    not_none = (el for el in values if el is not None)
    return next(not_none, None)

df = pd.DataFrame([{'third':'B','first':'A','second':'C'},
                   {'third':'B','first':None,'second':'C'},
                   {'third':'B','first':None,'second':None},                   
                   {'third':None,'first':None,'second':None},
                   {'third':'B','first':'A','second':None}])

df['combo1'] = df.apply(coalesce, axis=1)
df['combo2'] = df[['second','third','first']].apply(coalesce, axis=1)
print df

Результаты

  first second third combo1 combo2
0     A      C     B      A      C
1  None      C     B      C      C
2  None   None     B      B      B
3  None   None  None   None   None
4     A   None     B      A      B

этот код работает (и результат, который я хочу), но он не очень быстрый.
Я могу выбрать свои приоритеты, если мне нужно [['second', 'third', 'first']]

Coalesce чем-то похож на одноименную функцию из tsql.
Я подозреваю, что, возможно, я упустил простой способ добиться этого с хорошей производительностью на больших фреймах данных (+400000 строк)

Я знаю, что есть много способов заполнить пропущенные данные, которые я часто использую для оси = 0, это заставляет меня думать, что я, возможно, пропустил простой вариант для оси = 1

Можете ли вы предложить что-то более приятное / быстрое ... или подтвердить, что это так же хорошо, как и получается.

Ответы на вопрос(2)

Ваш ответ на вопрос