基于价值的熊猫查找

Ato*_*Siv 18 python numpy dataframe pandas

我有以下DataFrame:

Date    best    a    b    c    d
1990    a       5    4    7    2
1991    c       10   1    2    0
1992    d       2    1    4    12
1993    a       5    8    11   6
Run Code Online (Sandbox Code Playgroud)

我想制作如下数据帧:

Date    best    value   
1990    a       5
1991    c       2
1992    d       12
1993    a       5
Run Code Online (Sandbox Code Playgroud)

所以我希望通过使用列名来找到基于另一个行值的值.例如,第二个df中1990的值应该从第一个df中查找"a",第二个行应该从第一个df中查找"c"(= 2).

有任何想法吗?

chr*_*isb 14

有一个内置lookup函数可以处理这种情况(按行/列查找).我不知道它是如何优化的,但可能比应用解决方案更快.

In [9]: df['value'] = df.lookup(df.index, df['best'])

In [10]: df
Out[10]: 
   Date best   a  b   c   d  value
0  1990    a   5  4   7   2      5
1  1991    c  10  1   2   0      2
2  1992    d   2  1   4  12     12
3  1993    a   5  8  11   6      5
Run Code Online (Sandbox Code Playgroud)

  • “自版本 1.2.0 起已弃用:使用 DataFrame.melt 和 DataFrame.loc 代替。” (3认同)

EdC*_*ica 7

您创建了一个查找函数并apply逐行调用您的数据框,但这对于大型 dfs 并不是很有效

In [245]:

def lookup(x):
    return x[x.best]
df['value'] = df.apply(lambda row: lookup(row), axis=1)
df
Out[245]:
   Date best   a  b   c   d  value
0  1990    a   5  4   7   2      5
1  1991    c  10  1   2   0      2
2  1992    d   2  1   4  12     12
3  1993    a   5  8  11   6      5
Run Code Online (Sandbox Code Playgroud)