小编典典

在熊猫数据帧上的向量化查找

python

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

现在,我需要做的是在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

导致 。。。

    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

阅读 169

收藏
2020-12-20

共1个答案

小编典典

有一个恰当地命名的函数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
2020-12-20