第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

以 Level=0 為組的多級(jí)列上的簡(jiǎn)單向量化數(shù)學(xué)

以 Level=0 為組的多級(jí)列上的簡(jiǎn)單向量化數(shù)學(xué)

胡子哥哥 2023-09-05 21:17:11
我有這個(gè)數(shù)據(jù):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有沒有一種方法可以對(duì)每個(gè) 1 級(jí)列上的每個(gè) 0 級(jí)組列進(jìn)行簡(jiǎn)單的矢量化計(jì)算(如加法),而不必引用特定的列級(jí)別對(duì),例如: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貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個(gè)贊

我擺弄了一會(huì)兒,這是我認(rèn)為可以解決問題的一句臺(tái)詞。它是完全矢量化的,并且不尋址特定的列名稱。它還會(huì)將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 的特性是對(duì)最內(nèi)層進(jìn)行入棧 / 出棧,因此需要神秘的.stack(0).unstack(0)操作??雌饋磉@兩個(gè)操作應(yīng)該互相抵消,但它們實(shí)際上在保持順序的同時(shí)打亂索引級(jí)別。


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


df = df.stack(0)

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

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


查看完整回答
反對(duì) 回復(fù) 2023-09-05
?
慕田峪7331174

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊

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


查看完整回答
反對(duì) 回復(fù) 2023-09-05
?
犯罪嫌疑人X

TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊

這里有一個(gè)替代解決方案,使用相同的求和解決方案,但沒有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


查看完整回答
反對(duì) 回復(fù) 2023-09-05
  • 3 回答
  • 0 關(guān)注
  • 189 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)