title: Is there a better more readable way to coalese columns in pandas
body: <p>I often need a new column that is the best I can achieve from other columns and I have a specific list of preference priorities.  I am willing to take the first non null value.</p>
  
  <pre><code>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
  </code></pre>
  
  <p>Results</p>
  
  <pre><code>  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
  </code></pre>
  
  <p>this code works (and the result are what I want) but it is not very fast.<br>
  I get to pick my priorities if I need to [['second','third','first']]</p>
  
  <p>Coalesce somewhat like the function of the same name from tsql.<br>
  I suspect that I may have overlooked an easy way to achieve it with good performance on large DataFrames (+400,000 rows)</p>
  
  <p>I know there are lots of ways to fill in missing data which I often use on axis=0
  this is what makes me think I may have missed an easy option for axis=1</p>
  
  <p>Can you suggest something nicer/faster...  or confirm that this is as good as it gets.</p>