title: Stack a square DataFrame to only keep the upper/lower triangle
body: <p>I have a symmetric square <code>DataFrame</code> in <code>pandas</code>:</p>
  
  <pre><code>a = np.random.rand(3, 3)
  a = (a + a.T)/2
  np.fill_diagonal(a, 1.)
  a = pd.DataFrame(a)
  </code></pre>
  
  <p>That looks like this:</p>
  
  <pre><code>          0         1         2
  0  1.000000  0.747064  0.357616
  1  0.747064  1.000000  0.631622
  2  0.357616  0.631622  1.000000
  </code></pre>
  
  <p>If I apply the <code>stack</code> method, I would get lots of redundant information (including the diagonal, in which I'm not interested):</p>
  
  <pre><code>0  0    1.000000
     1    0.747064
     2    0.357616
  1  0    0.747064
     1    1.000000
     2    0.631622
  2  0    0.357616
     1    0.631622
     2    1.000000
  </code></pre>
  
  <p>Is there a way to only get the lower (or upper) triangle this using "pure" <code>pandas</code>?</p>
  
  <pre><code>1  0    0.747064
  2  0    0.357616
     1    0.631622
  </code></pre>