NumPy中等效的Pandas Series.map

时间:2018-10-04 18:13:15

标签: python pandas numpy

我有一个查找值dictionary = {'a': 1, 'b': 2, 'c': 3, 'd': 3}的字典

我希望从numpy获得的结果是pandas.Series.map()传入字典后返回的结果。例如series.map(dictionary, na_action='ignore')

注意:此series.map()函数非常快,这使我相信numpy API中必须有等效的函数,而不是我实现一些涉及numpy.where()的解决方案并循环字典键。

1 个答案:

答案 0 :(得分:3)

这里是一个NumPy-

def map_series_by_dict(s, d):
    a = s.values
    v = np.array(list(d.values()))
    k = np.array(list(d.keys()))    
    sidx = k.argsort()
    out_ar = v[sidx[np.searchsorted(k,a,sorter=sidx)]]
    return pd.Series(out_ar, index=s.index)

样品运行-

In [143]: d
Out[143]: {'a': 1, 'b': 2, 'c': 3, 'd': 3}

In [144]: s
Out[144]: 
0    a
1    a
2    c
3    b
4    a
dtype: object

In [145]: map_series_by_dict(s, d)
Out[145]: 
0    1
1    1
2    3
3    2
4    1