【问题标题】:Pandas return values from df using values from dfPandas 使用来自 df 的值从 df 返回值
【发布时间】:2017-03-28 09:31:17
【问题描述】:

我有一个 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

如何使用广播获得列返回?逻辑是:

  • Marker1 = 相关索引
  • Marker2 = 相关列
  • 返回 = 坐标中的值 (Marker1, Marker2)

【问题讨论】:

    标签: python python-2.7 pandas dataframe


    【解决方案1】:

    使用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)
    

    【讨论】:

    • lookup 在这里真的很棒 +1
    • 谢谢@pansen
    • 哇我不知道有这样的功能!谢谢@piRSquared!
    【解决方案2】:

    你可以使用:

    df['new'] = df.apply(lambda x: df.loc[x.Marker1,x.Marker2], axis=1)
    

    还有更好的lookup:

    df['new'] = df.lookup(df.Marker1, df.Marker2)
    

    【讨论】:

    • 查找正是我所需要的!谢谢@jazrael
    猜你喜欢
    • 2014-11-30
    • 1970-01-01
    • 2021-04-23
    • 2020-03-13
    • 2018-04-04
    • 2019-06-04
    • 1970-01-01
    • 2022-08-14
    • 2021-01-27
    相关资源
    最近更新 更多