我很难理解pandas multiindex是如何工作的。 具体来说:
使用previous question中的示例:
d1 = pd.DataFrame( {'StudentID': ["x1", "x10", "x2","x3", "x4", "x5", "x6", "x7", "x8", "x9"],
'StudentGender' : ['F', 'M', 'F', 'M', 'F', 'M', 'F', 'M', 'M', 'M'],
'ExamenYear': ['2007','2007','2007','2008','2008','2008','2008','2009','2009','2009'],
'Exam': ['algebra', 'stats', 'bio', 'algebra', 'algebra', 'stats', 'stats', 'algebra', 'bio', 'bio'],
'Participated': ['no','yes','yes','yes','no','yes','yes','yes','yes','yes'],
'Passed': ['no','yes','yes','yes','no','yes','yes','yes','no','yes']},
columns = ['StudentID', 'StudentGender', 'ExamenYear', 'Exam', 'Participated', 'Passed'])
我计算了两个数据集
def ZahlOccurence_0(x):
return pd.Series({'All': len(x['StudentID']),
'Part': sum(x['Participated'] == 'yes'),
'Pass' : sum(x['Passed'] == 'yes')})
t1 = d1.groupby(['ExamenYear', 'Exam']).apply(ZahlOccurence_0)
t2 = d1.groupby('ExamenYear').apply(ZahlOccurence_0)
如何按行合并t1和t2?
print t1
All Part Pass
ExamenYear Exam
2007 algebra 1 0 0
bio 1 1 1
stats 1 1 1
2008 algebra 2 1 1
stats 2 2 2
2009 algebra 1 1 1
bio 2 2 1
print t2
All Part Pass
ExamenYear
2007 3 2 2
2008 4 3 3
2009 3 3 2
我尝试了以下
t2 = t2.set_index([t2.index, np.array(['tot']* 3)], append = False)
但是
pd.concat(t1,t2)
产生错误
ValueError:无法在DataFrame上调用bool()。
我做错了什么?
提前致谢
答案 0 :(得分:2)
正如@DSM指出的那样,DataFrame对象需要在列表中
pd.concat([t1, t2])
我必须执行与您类似的计算。这是我首选的方法
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