Pandas 将数据帧与不同级别的索引串联在一起
我很难理解熊猫多索引是如何工作的。 具体而言:Pandas 将数据帧与不同级别的索引串联在一起,pandas,multi-index,Pandas,Multi Index,我很难理解熊猫多索引是如何工作的。 具体而言: 如何合并不同索引级别的两个数据帧(按行) 如何更改数据帧的索引级别 使用以下示例: 我计算两个数据集 def ZahlOccurence_0(x): return pd.Series({'All': len(x['StudentID']), 'Part': sum(x['Participated'] == 'yes'), 'Pass' : sum(x['Pass
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)
但是
产生错误
ValueError:无法在数据帧上调用bool()。
我做错了什么
提前感谢@DSM指出数据帧对象需要在列表中
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
正如@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
如果键入
help(pd.concat)
,您将看到它将对象集合作为第一个参数。注意,它应该是pd.concat([t1,t2])
。不过,我不确定您希望得到什么样的输出:它是否类似于pd.concat([t1,t2]).sort()
?也许这就是您想要的t2['Exam']='tot';pd.concat([t1.reset_index(),t2.reset_index()])真傻!谢谢DSM:我只是忘了把对象放在列表中:-(@user1827356:这就是我要找的,而且做得很复杂。你能把你的评论作为回复发布出来,这样我就可以接受它并结束问题了吗?如果你键入help(pd.concat)
您将看到它以一组对象作为第一个参数。瞧,它应该是pd.concat([t1,t2])
。不过,我不确定您希望得到什么样的输出:它是否类似于pd.concat([t1,t2]).sort()
?也许这就是您想要的?-t2['Exam'='tot';pd.concat([t1.reset_index()),t2.reset_index())我真傻!谢谢!!!!!DSM:我只是忘了把对象放在列表中:-(@user1827356:这就是我一直在寻找的,而且做得很复杂。你能把你的评论作为一个回复,这样我就可以接受它并结束这个问题吗?谢谢。我对熊猫很陌生,但对它的功能很兴奋。谢谢。我对熊猫很陌生,但对它的功能很兴奋。