Pandas Pivot and Summarize For Multiple Rows Vertically
<p>Given the following data frame:</p>

<pre><code>import numpy as np
import pandas as pd
df = pd.DataFrame({'Site':['a','a','a','b','b','b'],
                   'x':[1,1,0,1,0,0],
                   'y':[1,np.nan,0,1,1,0]
                   })

df

    Site    y   x
0   a      1.0  1
1   a      NaN  1
2   a      0.0  0
3   b      1.0  1
4   b      1.0  0
5   b      0.0  0
</code></pre>

<p>I am looking for the most efficient way, for each numerical column (y and x), to produce a percent per group, label the column name, and stack them in one column. 
Here's how I accomplish this for 'y':</p>

<pre><code>df=df.loc[~np.isnan(df['y'])] #do not count non-numbers
t=pd.pivot_table(df,index='Site',values='y',aggfunc=[np.sum,len])
t['Item']='y'
t['Perc']=round(t['sum']/t['len']*100,1)
t
    sum     len     Item    Perc
Site                
a   1.0     2.0     y       50.0
b   2.0     3.0     y       66.7
</code></pre>

<p>Now all I need is a way to add 2 more rows to this; the results for 'x' if I had pivoted with its values above, like this:</p>

<pre><code>    sum     len     Item    Perc
Site                
a   1.0     2.0     y       50.0
b   2.0     3.0     y       66.7
a   1       2       x       50.0
b   1       3       x       33.3
</code></pre>

<p>In reality, I have 48 such numerical data columns that need to be stacked as such.</p>

<p>Thanks in advance!</p>