As @DSM pointed it out the DataFrame objects need to be in a list
pd.concat([t1, t2])
I do have to perform calculations similar to yours. This is my preferred method
t2['Exam'] = 'tot'
All Part Pass Exam
ExamenYear
2007 3 2 2 tot
2008 4 3 3 tot
2009 3 3 2 tot
pd.concat([t1.reset_index(),t2.reset_index()], ignore_index=True)
All Exam ExamenYear Part Pass
0 1 algebra 2007 0 0
1 1 bio 2007 1 1
2 1 stats 2007 1 1
3 2 algebra 2008 1 1
4 2 stats 2008 2 2
5 1 algebra 2009 1 1
6 2 bio 2009 2 1
7 3 tot 2007 2 2
8 4 tot 2008 3 3
9 3 tot 2009 3 2