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

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

Dataframe.lookup 和 map 組合導(dǎo)致列標(biāo)簽錯誤

Dataframe.lookup 和 map 組合導(dǎo)致列標(biāo)簽錯誤

SMILET 2022-01-18 17:17:25
我有一個大約 (1200, 10) 的大數(shù)據(jù)框,主要是字符串,我必須在現(xiàn)有參考列“Y”的基礎(chǔ)上附加一個新列“Z”,其值為“A”、“B”、“C” ',或未知(NaN 或其他),我需要從中選擇 df 中的三個對應(yīng)列之一,例如“D”、“E”、“F”,或輸出 NaN 并將此值附加為“Z”列。我目前有以下代碼:df = pd.DataFrame({'T': {0: '.', 1: '.', 2: '.', 3: '.'},                    'G': {0: '.', 1: '.', 2: '.', 3: '.'},                    'D': {0: 4, 1: 1, 2: 5, 3: 3},                    'E': {0: 6, 1: 2, 2: 7, 3: 2},                    'F': {0: 8, 1: 3, 2: 9, 3: 1},                    'K': {0: '.', 1: '.', 2: '.', 3:'.'},                    'Y': {0: 'A', 1: 'B', 2: 'B', 3: np.nan}})d = {'A': 'D', 'B': 'E', 'C': 'F'}df['Z'] = df.lookup(df.index, df.Y.map(d))問題是查找會在 Y 是未知值的情況下發(fā)生故障。在特定的代碼中,Y.unique() 會出現(xiàn)類似 (A, B, C, NaN, nan) 的內(nèi)容。所以我想知道是否有一種方法可以使用查找式方法將 Z 輸出到 NaN,其中 Y 是 NaN 或在給定字典之外未知?    T   G   D   E   F   K   Y   Z0   .   .   4   6   8   .   A   4.01   .   .   1   2   3   .   B   2.02   .   .   5   7   9   .   B   7.03   .   .   3   2   1   .   NaN NaN
查看完整描述

3 回答

?
隔江千里

TA貢獻(xiàn)1906條經(jīng)驗 獲得超10個贊

您可以將stackandreindex與 zip 一起用于多索引:


df['Z'] = df.stack().reindex(zip(df.index, df.Y.map(d))).reset_index(level=1, drop=True)

輸出:


   T  G  D  E  F  K    Y    Z

0  .  .  4  6  8  .    A    4

1  .  .  1  2  3  .    B    2

2  .  .  5  7  9  .    B    7

3  .  .  3  2  1  .  NaN  NaN

細(xì)節(jié):


首先,讓我們使用stack,將列標(biāo)題移動到數(shù)據(jù)框行索引中,為數(shù)據(jù)框創(chuàng)建一個多索引。其中,級別 0 是原始行索引,級別 1 是列標(biāo)題。


現(xiàn)在,我們可以使用它reindex來過濾到我們需要的那些索引。使用元組標(biāo)識多索引。(level0, level1) 因此,我們zipdf.index 和 df.y.map(d) 一起創(chuàng)建了 reindex 使用的元組。


最后,我們刪除多索引的 level=1,創(chuàng)建原始索引的結(jié)構(gòu),并用這些值分配一個新列。


查看完整回答
反對 回復(fù) 2022-01-18
?
慕絲7291255

TA貢獻(xiàn)1859條經(jīng)驗 獲得超6個贊

我在用 .values


df['Z'] = df.values[df.index, df.columns.get_indexer_for(df.Y.map(d))]

df

Out[135]: 

   T  G  D  E  F  K    Y    Z

0  .  .  4  6  8  .    A    4

1  .  .  1  2  3  .    B    2

2  .  .  5  7  9  .    B    7

3  .  .  3  2  1  .  NaN  NaN


查看完整回答
反對 回復(fù) 2022-01-18
?
有只小跳蛙

TA貢獻(xiàn)1824條經(jīng)驗 獲得超8個贊

您可以用列中不存在的一些輔助值替換缺失值,并通過匹配這些值Y添加具有相同名稱的新輔助列:DataFrame.assign


df['Z'] = df.assign(tmp = np.nan).lookup(df.index, df.Y.map(d).fillna('tmp'))

print (df)

   T  G  D  E  F  K    Y    Z

0  .  .  4  6  8  .    A  4.0

1  .  .  1  2  3  .    B  2.0

2  .  .  5  7  9  .    B  7.0

3  .  .  3  2  1  .  NaN  NaN

另一種解決方案:


df[np.nan] = np.nan

df['Z'] = df.lookup(df.index, df.Y.map(d))

df = df.drop(np.nan, axis=1)

print (df)

   T  G  D  E  F  K    Y    Z

0  .  .  4  6  8  .    A  4.0

1  .  .  1  2  3  .    B  2.0

2  .  .  5  7  9  .    B  7.0

3  .  .  3  2  1  .  NaN  NaN


查看完整回答
反對 回復(fù) 2022-01-18
  • 3 回答
  • 0 關(guān)注
  • 174 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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