我有一个df:

Index    ColA    ColB    ...    Marker1    Marker2    Return
 t0       a0      b0     ...      t0        colA        a0
 t1       a1      b1     ...      t1        colB        b1
 t2       a2      b2     ...      t1        colZ        z1
 t3       a3      b3     ...      t3        colB        b3


如何获得“通过广播返回”专栏?逻辑是:


标记1 =相关索引
标记2 =相关列
Return =坐标中的值(Marker1,Marker2)

最佳答案

使用pd.DataFrame.lookup

df.assign(Return2=df.lookup(df.Marker1, df.Marker2))

      ColA ColB ColZ Marker1 Marker2 Return Return2
Index
t0      a0   b0   z0      t0    ColA     a0      a0
t1      a1   b1   z1      t1    ColB     b1      b1
t2      a2   b2   z2      t1    ColZ     z1      z1
t3      a3   b3   z3      t3    ColB     b3      b3




设定

from io import StringIO
import pandas as pd

txt = """Index    ColA    ColB    ColZ   ...    Marker1    Marker2    Return
 t0       a0      b0     z0     ...      t0        ColA        a0
 t1       a1      b1     z1     ...      t1        ColB        b1
 t2       a2      b2     z2     ...      t1        ColZ        z1
 t3       a3      b3     z3     ...      t3        ColB        b3"""

df = pd.read_csv(StringIO(txt), delim_whitespace=True, index_col=0).drop('...', 1)

10-08 02:22