简体   繁体   中英

How to Match multiple columns with given single column name and get its value in new column?

I have previously asked a question How to Match multiple columns with given single column and get its name in new column?

But now i want to get data from column name:

here is demo data:

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

Now i want the real values from corresponding columns by looking at column Near as below:

    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

so far i got it using df.lookup(df.index, df.Near) but it fails at Nan also lookup is deprecated

Try with, notice we used to have lookup, but pandas will no longer support this function 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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM