パンダのマルチインデックスがどのように機能するかを理解するのに問題があります。具体的には:
- 異なるインデックスレベルの2つのデータフレームを(行ごとに)マージする方法
- データフレームのインデックスレベルを変更するにはどうすればよいですか
前の質問の例を使用して:
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'])
2つのデータセットを計算します
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()を呼び出すことはできません。
私が間違っていることは何ですか?
前もって感謝します