Есть ли лучший, более читаемый способ объединения столбцов в пандах
Мне часто нужен новый столбец, который является лучшим, которого я могу достичь из других столбцов, и у меня есть конкретный список приоритетов предпочтений. Я готов принять первое ненулевое значение.
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
Можете ли вы предложить что-то более приятное / быстрое ... или подтвердить, что это так же хорошо, как и получается.