Często potrzebuję nowej kolumny, która jest najlepsza z innych kolumn i mam określoną listę priorytetów preferencji. Jestem gotów przyjąć pierwszą wartość nie mającą wartości null.Czy jest lepszy czytelniejszy sposób na zwijanie kolumn w pandach?
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
Wyniki
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
ten kod działa (a wynik jest to, co chcę), ale to nie jest bardzo szybki.
Wybieram priorytety, jeśli chcę [["drugi", "trzeci", "pierwszy"]]
Łączą się trochę jak funkcja o tej samej nazwie z tsql.
Podejrzewam, że mogę przeoczyć łatwy sposób go osiągnąć dobrą wydajność na dużych DataFrames (+400,000 wierszach)
Wiem, że istnieje wiele sposobów na uzupełnienie brakujących danych, które często używam na osi = 0 to właśnie sprawia, że mogłem przegapić łatwą opcję dla osi = 1
Czy możesz zaproponować coś ładniejszego/szybciej ... lub potwierdzić, że jest to tak dobre, jak to tylko możliwe.
wielką odpowiedź. . – thecheech