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),并用這些值分配一個新列。

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

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
添加回答
舉報