假設我在結構中有一個類似於以下內容的熊貓數據框。然而,在 的實踐中,它可能會更大,第一級索引的數量以及第二級索引的數量(每級別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
我在做什麼錯?
如果二級索引的數量發生變化,這將如何工作?我在我的問題中提到了這一點,但意識到這個例子沒有真正說明它,所以我已經調整了示例代碼以具有額外的1級條目(「v」)。 – arman
我認爲第二個解決方案應該可以工作。 – jezrael
是的,你說得對。謝謝 :) – arman