如何将Pandas查找表应用于numpy数组?

时间:2018-02-01 02:12:09

标签: python python-3.x pandas numpy dictionary

我有一个像这样的熊猫系列:

      measure
0    0.3
6    0.6
9    0.2
11   0.3
14   0.0
17   0.1
23   0.9

和像这样的numpy数组:

array([[ 0,  0,  9, 11],
       [ 6, 14,  6, 17]])

如何从numpy数组中的值到系列中的索引进行查找以获得此结果:

array([[ 0.3,  0.3,  0.2, 0.3],
       [ 0.6,  0.0,  0.6, 0.1]])

4 个答案:

答案 0 :(得分:6)

通过np.vectorize,系列s和数组a

np.vectorize(s.get)(a)

答案 1 :(得分:2)

使用replace

a=np.array([[ 0,  0,  9, 11],
       [ 6, 14,  6, 17]])
pd.DataFrame(a).replace(df.measure.to_dict()).values
Out[214]: 
array([[0.3, 0.3, 0.2, 0.3],
       [0.6, 0. , 0.6, 0.1]])

答案 2 :(得分:2)

使用np.bincount

的有趣方式
np.bincount(s.index.values, s.values)[a]

array([[ 0.3,  0.3,  0.2,  0.3],
       [ 0.6,  0. ,  0.6,  0.1]])

设置

s = pd.Series(
    [.3, .6, .2, .3, .0, .1, .9],
    [0, 6, 9, 11, 14, 17, 23]
)

a = np.array([
    [0, 0, 9, 11],
    [6, 14, 6, 17]
])

答案 3 :(得分:1)

您可以使用loc和reshape:

s = pd.Series({0: 0.3, 6: 0.6, 9: 0.2, 11: 0.3, 14: 0.0, 17: 0.1, 23: 0.9})

a = np.array([[ 0,  0,  9, 11],
             [ 6, 14,  6, 17]])

s.loc[a.flatten()].values.reshape(a.shape)
Out[192]: 
array([[ 0.3,  0.3,  0.2,  0.3],
       [ 0.6,  0. ,  0.6,  0.1]])

或者:

pd.DataFrame(a).applymap(lambda x: s.loc[x]).values
Out[200]: 
array([[ 0.3,  0.3,  0.2,  0.3],
       [ 0.6,  0. ,  0.6,  0.1]])