Pandas 数据框上的矢量化查找

Ara*_*eel 3 python lookup vectorization dataframe pandas

我有两个 DataFrames 。. .

df1 是一个表,我需要从使用索引中提取值,从 df2 中的多个列中检索的列对。

我看到有一个函数get_value在给定索引和列值时可以完美运行,但是当尝试矢量化此函数以创建新列时,我失败了...

df1 = pd.DataFrame(np.arange(20).reshape((4, 5)))

df1.columns = list('abcde')

df1.index = ['cat', 'dog', 'fish', 'bird']

        a   b   c   d   e
cat     0   1   2   3   4
dog     5   6   7   8   9
fish    10  11  12  13  14
bird    15  16  17  18  19

df1.get_value('bird, 'c')

17
Run Code Online (Sandbox Code Playgroud)

现在我需要做的是创建一个完整的新列df2- 当df1基于索引进行索引时,来自animal,letter列的列对在df2有效矢量化上述pd.get_value函数时指定。

df2 = pd.DataFrame(np.arange(20).reshape((4, 5)))

df2['animal'] = ['cat', 'dog', 'fish', 'bird']

df2['letter'] = list('abcd')

    0   1   2   3   4   animal  letter
0   0   1   2   3   4   cat     a
1   5   6   7   8   9   dog     b
2   10  11  12  13  14  fish    c
3   15  16  17  18  19  bird    d
Run Code Online (Sandbox Code Playgroud)

导致 。. .

    0   1   2   3   4   animal  letter   looked_up
0   0   1   2   3   4   cat     a        0
1   5   6   7   8   9   dog     b        6
2   10  11  12  13  14  fish    c        12
3   15  16  17  18  19  bird    d        18
Run Code Online (Sandbox Code Playgroud)

cs9*_*s95 5

有一个恰如其分地命名的函数lookup可以做到这一点。

df2['looked_up'] = df1.lookup(df2.animal, df2.letter)

df2

    0   1   2   3   4 animal letter  looked_up
0   0   1   2   3   4    cat      a          0
1   5   6   7   8   9    dog      b          6
2  10  11  12  13  14   fish      c         12
3  15  16  17  18  19   bird      d         18
Run Code Online (Sandbox Code Playgroud)