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.