次のような構造のpandas DataFrameがあるとします。しかし、 の練習では、レベル1のインデックスの数とレベル2のインデックスの数(レベル1のインデックスごと)が異なるため、解決策ではこれを仮定しないでください。MultiIndex DataFrameの特定の場所にどのように挿入できますか?
index = pandas.MultiIndex.from_tuples([
("a", "s"),
("a", "u"),
("a", "v"),
("b", "s"),
("b", "u")])
result = pandas.DataFrame([
[1, 2],
[3, 4],
[5, 6],
[7, 8],
[9, 10]], index=index, columns=["x", "y"])
このようになります
:
x y
a s 1 2
u 3 4
v 5 6
b s 7 8
u 9 10
は、今の私は、「a」および「b」のレベルごとに「合計」行を作成したいとしましょう。だから私は私のコードは、このような何かを作るしたい入力上記のように与えられた:
x y
a s 1 2
u 3 4
v 5 6
t 9 12
b s 7 8
u 9 10
b t 16 18
ここで私がこれまで持っているコードです:
# Calculate totals
for level, _ in result.groupby(level=0):
# work out the global total for that desk:
x_sum = result.loc[level]["x"].sum()
y_sum = result.loc[level]["y"].sum()
result = result.append(pandas.DataFrame([[x_sum, y_sum]], columns=result.columns, index=pandas.MultiIndex.from_tuples([(level, "t")])))
は、しかし、これは追加される「合計」欄に結果最後に:
x y
a s 1 2
u 3 4
v 5 6
b s 7 8
u 9 10
a t 9 12
b t 16 18
は私がやりたいことはありませんresult.sort_index()
を使用して並べ替え、次のいずれか
x y
a s 1 2
t 9 12
u 3 4
v 5 6
b s 7 8
t 16 18
u 9 10
私は間違っていますか?
レベル2インデックスの数が変更された場合、これはどのように機能しますか?私は私の質問でこれを言いましたが、その例で実際にそれを説明していないことに気がついたので、サンプルコードをレベル1のエントリ( "v")に調整しました。 – arman
私は2番目の解決策が動作するはずだと思います。 – jezrael
そうですね。ありがとうございました :) – arman