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

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

以 Level=0 為組的多級列上的簡單向量化數學

以 Level=0 為組的多級列上的簡單向量化數學

胡子哥哥 2023-09-05 21:17:11
我有這個數據:import pandas as pdimport numpy  as npindex = pd.MultiIndex.from_tuples(list(zip(*[['one', 'one', 'two', 'two'],['foo', 'bar', 'foo', 'bar']])))df = pd.DataFrame(np.arange(12).reshape((3,4)), columns=index)  one     two      foo bar foo bar0   0   1   2   31   4   5   6   72   8   9  10  11有沒有一種方法可以對每個 1 級列上的每個 0 級組列進行簡單的矢量化計算(如加法),而不必引用特定的列級別對,例如:df[('one','add')] = df[('one','foo')]+df[('one','bar')]我想得到  one          two        foo bar add  foo bar add0   0   1   1    2   3   51   4   5   9    6   7  132   8   9  17   10  11  21
查看完整描述

3 回答

?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

我擺弄了一會兒,這是我認為可以解決問題的一句臺詞。它是完全矢量化的,并且不尋址特定的列名稱。它還會將add列放置在正確的位置。

df.stack(0).assign(add=df.stack(0).sum(axis=1)).stack(0).unstack(0).T

https://img1.sycdn.imooc.com//64f72ab200013e2002200135.jpg

不幸的是,由于 stack / unstack 的特性是對最內層進行入棧 / 出棧,因此需要神秘的.stack(0).unstack(0)操作??雌饋磉@兩個操作應該互相抵消,但它們實際上在保持順序的同時打亂索引級別。


這是同樣的事情,分為 3 行,沒有賦值語句。


df = df.stack(0)

df['add'] = df.sum(axis=1)

df = df.stack(0).unstack(0).T


查看完整回答
反對 回復 2023-09-05
?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

pandas.DataFrame.sum與axis=1和 一起使用level=0:


df2 = df.sum(axis=1, level=0)

print(df2)

輸出:


   one  two

0    1    5

1    9   13

2   17   21

然后您可以將新的列名稱添加到pandas.concat:


df2.columns = [(c, "add") for c in df2]

df2 = pd.concat([df, df2], 1).sort_index(1)

print(df2)

輸出:


  one         two        

  add bar foo add bar foo

0   1   1   0   5   3   2

1   9   5   4  13   7   6

2  17   9   8  21  11  10


查看完整回答
反對 回復 2023-09-05
?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

這里有一個替代解決方案,使用相同的求和解決方案,但沒有pd.concat:


df[("one", "add")] = None

df[("two", "add")] = None

df.iloc[:, -2:] = df.sum(axis=1, level=0).to_numpy()

df.sort_index(1)

    one              two

     add    bar foo  add    bar foo

0    1.0    1   0    5.0     3  2

1    9.0    5   4    13.0   7   6

2    17.0   9   8    21.0   11  10


查看完整回答
反對 回復 2023-09-05
  • 3 回答
  • 0 關注
  • 193 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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