私はこのようなマルチインデックスのデータフレームを持っている:マルチインデックスデータフレームのサブセットを新しいデータフレームに格納する方法は?
import pandas as pd
import numpy as np
df = pd.DataFrame({'ind1': list('aaaaaaaaabbbbbbbbb'),
'ind2': list('cccdddeeecccdddeee'),
'ind3': list(range(3))*6,
'val1': list(range(100, 118)),
'val2': list(range(70, 88))})
df_mult = df.set_index(['ind1', 'ind2', 'ind3'])
val1 val2
ind1 ind2 ind3
a c 0 100 70
1 101 71
2 102 72
d 0 103 73
1 104 74
2 105 75
e 0 106 76
1 107 77
2 108 78
b c 0 109 79
1 110 80
2 111 81
d 0 112 82
1 113 83
2 114 84
e 0 115 85
1 116 86
2 117 87
私は今、今、私ならば期待
val1 val2
ind1 ind2 ind3
a c 0 100 70
1 101 71
2 102 72
d 0 103 73
1 104 74
2 105 75
を与える.loc
df_subs = df_mult.loc['a', ['c', 'd'], :]
を使用して、それのサブセットを選択することができますdf_subs
のサブセットを再度選択したいとします。
df_subs.loc['a', 'c', :]
作品となります
val1 val2
ind3
0 100 70
1 101 71
2 102 72
しかし
df_subs.loc[:, 'c', :]
が失敗し、エラー
KeyError: 'the label [c] is not in the [columns]'
なぜこれができないのを与えますか?
EDIT
もともと、私はこの記事に2つの質問を持っていました。私はそれを2つに分割しました。第2の質問はhereです。 IndexSlice
を使用することにより
https://pandas.pydata.org/pandas-docs/stable/advanced.html「スライス」や「IndexSlice」を使用しない理由 – Wen
@Wen:確かに、より良いオプションがあるかもしれませんが、私はまだ好きです上記の試みが失敗する理由を理解する。試行が間違っている場合は、それを実行する正しい方法、つまり代替案を確認することは素晴らしいことです。 – Cleb
@JohnE:それでは、すでに知っておいてよかったです。私は 'IndexSlice'をいつ使うべきか正確に把握する必要があります。 df_mult.loc [pd.IndexSlice ['a'、['c'、 'd']、:]、:]。index'はまだ 'a'と'レベル0のb。どんな考え? – Cleb