首页 > 解决方案 > 如何匹配具有给定单列名称的多列并在新列中获取其值?

问题描述

我以前问过一个问题 如何将多个列与给定的单列匹配并在新列中获取其名称?

但现在我想从列名中获取数据:

这是演示数据:

df = pd.DataFrame({"mtc": [1, 2, 3, 4],
                     "C1": [0.5, 2, 3.5, 5],
                    "C2": [1, 3, 2.2, 5],
                    "C3": [1, 3, 2.9, 5],
                    "C4": [4.1,6, 6, 6]})

d=df[['C1', 'C2', 'C3', 'C4']]
c=(d.div(df.mtc,axis=0)-1)
m = c.ge(-0.15) & c.le(0.15)
df['Near'] = m.idxmax(1).mask(~m.any(1))

df>>
   mtc  C1  C2  C3  C4  Near
0   1   0.5 1.0 1.0 4.1 C2
1   2   2.0 3.0 3.0 6.0 C1
2   3   3.5 2.2 2.9 6.0 C3
3   4   5.0 5.0 5.0 6.0 NaN

现在我想通过如下查看对应的实际columnscolumn Near

    mtc C1  C2  C3  C4  Near    Realvalues
0   1   0.5 1.0 1.0 4.1 C2      1.0
1   2   2.0 3.0 3.0 6.0 C1      2.0
2   3   3.5 2.2 2.9 6.0 C3      2.9
3   4   5.0 5.0 5.0 6.0 NaN     NaN

到目前为止,我使用它,但它也df.lookup(df.index, df.Near)失败了Nanlookupdeprecated

标签: pythonpandas

解决方案


试试看,注意我们以前有lookup,但是pandas将不再支持这个功能sad ..

df['value'] = df.values[df.index,df.columns.get_indexer(df.Near)]
df
Out[27]: 
   mtc   C1   C2   C3   C4 Near value
0    1  0.5  1.0  1.0  4.1   C2     1
1    2  2.0  3.0  3.0  6.0   C1     2
2    3  3.5  2.2  2.9  6.0   C3   2.9
3    4  5.0  5.0  5.0  6.0  NaN   NaN

推荐阅读