假設您有一個帶有 MultiIndex 的簡單 pandas 數據框:df = pd.DataFrame(1, index=pd.MultiIndex.from_tuples([('one', 'elem1'), ('one', 'elem2'), ('two', 'elem1'), ('two', 'elem2')]), columns=['col1', 'col2'])打印成表格: col1 col2one elem1 1 1 elem2 1 1two elem1 1 1 elem2 1 1問題:如何向該 Dataframe 添加“總計”行?預期輸出: col1 col2one elem1 1.0 1.0 elem2 1.0 1.0two elem1 1.0 1.0 elem2 1.0 1.0Total 4.0 4.0第一次嘗試:天真的實現如果我只是忽略 MultiIndex 并遵循標準方式df.loc['Total'] = df.sum()輸出: col1 col2(one, elem1) 1 1(one, elem2) 1 1(two, elem1) 1 1(two, elem2) 1 1Total 4 4好像是對的,但是MultiIndex被改成了Index([('one', 'elem1'), ('one', 'elem2'), ('two', 'elem1'), ('two', 'elem2'), 'Total'], dtype='object')第二次嘗試:明確df.loc['Total', :] = df.sum()或者(感到沮喪并出于惡意改變軸)df.loc['Total', :] = df.sum(axis=1)輸出(兩次調用相同): col1 col2one elem1 1.0 1.0 elem2 1.0 1.0two elem1 1.0 1.0 elem2 1.0 1.0Total NaN NaNMultiIndex 未轉換,但 Total 錯誤(NaN != 4)。
1 回答

慕少森
TA貢獻2019條經驗 獲得超9個贊
解決方案
您必須刪除索引df.sum()并僅使用這些值:
df.loc['Total', :] = df.sum().values
輸出:
col1 col2
one elem1 1.0 1.0
elem2 1.0 1.0
two elem1 1.0 1.0
elem2 1.0 1.0
Total 4.0 4.0
為什么第二次嘗試錯了?
第二次嘗試幾乎是正確的。但是 df.sum() 有Index(['col1', 'col2'], dtype='object'). 因此,pandas 無法匹配索引。新索引 ('Total', '') 已附加但沒有值。
但是為什么df.loc['Total', :] = df.sum(axis=1)也失敗了呢?它具有正確的多索引。Pandas 完全按照您所說的去做,即對列求和。因此,df.sum(axis=1)為您提供以下數據框:
one elem1 2
elem2 2
two elem1 2
elem2 2
df該數據框在任何意義上都無法與原始數據框匹配。
添加回答
舉報
0/150
提交
取消