亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 MultiIndex 將“總計”行附加到熊貓數據框

如何使用 MultiIndex 將“總計”行附加到熊貓數據框

萬千封印 2023-02-07 13:44:26
假設您有一個帶有 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該數據框在任何意義上都無法與原始數據框匹配。


查看完整回答
反對 回復 2023-02-07
  • 1 回答
  • 0 關注
  • 79 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號