title: merging multiple partially overlapping dataframes compactly without extra rows and nans
body: <p>I have a bunch of partially overlapping (in rows and columns) pandas DataFrames, exemplified like so:</p>
  
  <pre><code>df1 = pandas.DataFrame({'a':['1','2','3'], 'b':['a','b','c']})
  df2 = pandas.DataFrame({'c':['q','w','e','r','t','y'], 'b':['a','b','c','d','e','f']})
  df3 = pandas.DataFrame({'a':['4','5','6'], 'c':['r','t','y']})
  ...etc.
  </code></pre>
  
  <p>I want to merge them all together with as few NaN holes as possible. </p>
  
  <p>Consecutive blind outer merges invariably give some (unfortunately useless to me) hole-and-duplicate-filled variant of:</p>
  
  <blockquote>
  <pre><code>     a    b  c
  0    1    a  q
  1    2    b  w
  2    3    c  e
  3  NaN    d  r
  4  NaN    e  t
  5  NaN    f  y
  6    4  NaN  r
  7    5  NaN  t
  8    6  NaN  y
  </code></pre>
  </blockquote>
  
  <p>My desired output given a, b, and c above would be this (column order doesn't matter):</p>
  
  <blockquote>
  <pre><code>   a  b  c
  0  1  a  q
  1  2  b  w
  2  3  c  e
  3  4  d  r
  4  5  e  t
  5  6  f  y
  </code></pre>
  </blockquote>
  
  <p>I want the NaNs to be treated as places to insert data from the next dataframe, not obstruct it.</p>
  
  <p>I'm at a loss here. Is there any way to achieve this in a general way?</p>