Мне часто нужен новый столбец, который я могу достичь из других столбцов, и у меня есть определенный список приоритетов предпочтений. Я готов принять первое ненулевое значение.
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']]
Совместите несколько подобно функции с тем же именем из tsql.
Я подозреваю, что я, возможно, пропустил простой способ добиться этого с хорошей производительностью на больших DataFrames (+400 000 строк)
Я знаю, что есть много способов заполнить недостающие данные, которые я часто использую на оси = 0 это то, что заставляет меня думать, что я, возможно, пропустил простой вариант для оси = 1
Можете ли вы предложить что-то приятнее/быстрее... или подтвердите, что это так хорошо, как оно есть.